현대적인 C ++이 더 널리 보급되고 있습니까? [닫은] 전에 .

6-7 년 전에 C ++을 처음 배웠을 때 배운 것은 기본적으로 “C with Classes”였습니다. std::vector당신이 정말로 원한다면 배울 수있는 고급 주제였습니다 . 그리고 메모리 관리를 돕기 위해 소멸자를 활용할 수 있다고 말하는 사람은 아무도 없었습니다. 오늘은 어디에서나 RAII와 SFINAE , STL과 Boost, 그리고 Modern C ++을 볼 수 있습니다. 언어를 막 시작한 사람들조차도 거의 1 일부터 이러한 개념을 배우는 것 같습니다.

제 질문은 “최상의”, 즉 여기 SO에 대한 질문과 초보자 (gamedev.net)를 끌어들이는 경향이있는 다른 프로그래밍 사이트에서만 볼 수 있기 때문입니다. C ++ 커뮤니티 전체?

현대 C ++이 실제로 기본값이됩니까? 전문가들이 작성하는 멋진 것이 아니라 “C ++의 방식”이 되었습니까? 아니면 여전히 “클래스를 사용하여 C”를 배우고을 사용하는 대신 자체 동적 배열을 작성하고 std::vector최상위 코드에서 new / delete를 수동으로 호출하여 메모리 관리를 수행 하는 수천 명의 사람들을 볼 수 없습니까?

내가 믿기를 원하는만큼 C ++ 커뮤니티 전체가 기본적으로 몇 년 동안 그렇게 많이 발전했다면 믿을 수 없을 것 같습니다. 당신의 경험과 인상은 무엇입니까?

(면책 조항 : C ++에 익숙하지 않은 사람은 C ++이 다른 언어보다 인기를 얻고 있는지 묻는 제목을 잘못 해석 할 수 있습니다. 내 질문은 아닙니다. “Modern C ++”는 C ++ 내에서 방언이나 프로그래밍 스타일의 일반적인 이름으로 책의 이름을 따서 ” 현대적인 C ++ 디자인 : 일반 프로그래밍 및 디자인 패턴 적용 “그리고 나는”오래된 C ++ “대 이것에만 관심이 있습니다. 따라서 C ++의 시간이 지났다고 말할 필요가 없습니다. 우리는 모두 파이썬을 사용해야합니다;))



답변

여기에 내가 진화했다고 생각하는 방법이 있습니다.

1 세대 C ++ 프로그래머는 C 프로그래머로 C 클래스를 C로 사용했습니다. 또한 STL은 아직 제자리에 없었으므로 C ++이 본질적으로 그런 것입니다.

STL이 나왔을 때, 그 진보 된 것들, 그러나 대부분의 사람들은 책을 쓰고, 커리큘럼을 정리하고, 수업을 가르치면서 C를 먼저 배웠고, 그 다음으로 C ++을 배웠습니다. 또 다른 대답에서 알 수 있듯이, 규칙적인 for 루프를 작성하는 것이 편안하다면 사용을 변경해도 std::for_each“현대적인”방식으로 일을한다는 따뜻한 퍼지 느낌을 제외하고는 많이 사지 않습니다.

이제 우리는 C ++ 전체를 사용하고 Koenig & Moo의 Accelerated C ++ 및 Stroustrup의 새로운 교과서와 같은 관점에서 지침을 얻는 강사와 서적 작가를 보유하고 있습니다. 그래서 우리는 char*그때 배우지 않습니다 std::strings.

“레거시”방법을 대체하는 데 걸리는 시간, 특히 효과에 대한 기록이있는 경우에 흥미로운 교훈입니다.


답변

확실히 맞아요. 이 “현대 C ++”스타일로 C ++을 프로그래밍하지 않는다면 C ++을 사용할 필요가 없습니다! 당신은 C를 사용할 수도있을 것이다. “Modern C ++”는 C ++이 내 의견으로는 프로그래밍 된 유일한 방법이어야한다. 그리고 C ++을 사용하고이 “Modern”방식으로 프로그래밍 한 모든 사람들이 나와 동의 할 것으로 기대한다. 사실, auto_ptr이나 ptr_vector와 같은 것을 모르는 C ++ 프로그래머에 대해 들으면 항상 완전히 충격을받습니다. 내가 아는 한, 그 아이디어는 C ++의 기본적이고 근본적이므로 다른 방식으로는 상상할 수 없었습니다.


답변

Windows 3.1 시대에는 C가 표준이었습니다. C ++이 개발자 시장을 강타하고 나중에 ANSI 표준이되었을 때, 이것이 새로운 인기였습니다. 다형성을 사용하여 OOP 약어 및 일부 기본 디자인 패턴을 대중화했습니다.

이제 C # /. NET과 같이 낮은 장벽에서 항목으로 관리되는 플랫폼을 더 많이 수용하므로 C ++을 사용할 이유가 적습니다. 많은 개발자 기반이 선택을하고 솔직하게 말합시다. C ++는 초보자를위한 곰입니다. C #을 사용하면 바로 실행할 수 있습니다.

그것은 실제로 예술을 계속 연습 할 수있는 C ++ 및 다이 하드 C ++ 복음 주의자들이 필요로하는 플랫폼 만 남습니다. 이것은 “Modern C ++”로 간주되는 모든 추상화 계층을 필요로하고 원하는 커뮤니티입니다.

네, “Modern C ++”는 여러분이 말한대로 점점 더 널리 퍼지고 있다고 생각합니다. 그럼에도 불구하고 그것은 과거에 사용했던 것과는 다른 독자들에게 널리 퍼져 있습니다.


답변

저는 STL을 사용하는 방법을 배우고 첫날부터 RAII와 좋은 C ++ 프로그래밍 방법에 대해 많은 것을 들었던 이들 중 한 사람입니다. 오늘날 C ++을 배우기 위해 가장 권장되는 책 중 일부처럼 보입니다 (가속 C ++ 및 효과적인 C ++ 시리즈 등). ) 자신의 작업을 롤업하는 대신 STL 도구를 사용하는 데 집중하고 효과적인 (또는 “현대적인”) 프로그래밍을위한 많은 “규칙”을 제공합니다.

그러나 친구들과 이야기하면서 저는 일부 회사들이 여전히 “Modern C ++”가 아니라 “C with Classes”를 사용하고 있다고 언급했습니다. 어쩌면 “Modern C ++”의 저자와 사용자가 제안한 문화가 언젠가 우세 할 것입니다 🙂


답변

나는 당신이 처음에 나쁜 경험을했다고 생각합니다.

Scott Meyers Effective C ++ 서적 을 구해야 합니다. 1999 년에 C ++을 시작하면서 분노를 일으켰고, 팀 리더는 모든 코드를 체크인하기 전에 Effective C ++ 및 More Effective C ++를 읽고 읽었습니다.

그의 조언은 대부분의 라인에 “이 사용하지 마십시오 기능을 하지만, 당신이해야하는 경우, 계속 마음에”

그의 조언을 따르면 좋은 또는 “현대적인”C ++를 쓸 수 있습니다.

그는 지금도 STL에 관한 책을 가지고 있지만 읽지 않았습니다.


답변

내 C ++ 작업에서 현대적인 기능이 점점 더 많이 사용되는 것을 발견했으며 더 많은 사람들이 전화 심사 및 인터뷰에서 나에게 질문했습니다. 내가 알 수있는 한, 그들은 따라 잡고 있습니다.

나는 C ++을 클래스가있는 C와 같은 것으로 배웠다. 언어는 그 이상으로 발전했지만, 내가 읽은 책과 함께 일했던 사람들은 “오래된 C ++”에 굳게 붙어있었습니다. 사람들이 자동적으로 생각하기보다는 생각할 수있는 RAII, 나는 예외 안전 문제에 관한 초기 기사를 읽는 것을 기억합니다.

지적했듯이 이제 새로운 책이 나옵니다. 많은 오래된 것들이 여전히 관련이 있지만, 왜 분명히 나쁜 생각이 나쁜지를 설명하는 것으로 가득 차있는 것 같습니다. 유사하게, 현대 독자들은 무의식적 사고에 대한 혁명적 인 프로이트의 아이디어가 현재의 일반적인 지혜이기 때문에 얼마나 이해했는지가 어렵습니다.

Stroustrup은 Programming : Principles and Practice Using C ++ 교과서와 함께 나왔습니다 . 나는 Stroustrup의 책에서 좋은 것을 배우지 못했지만 처음 몇 장을 지나치지 않았기 때문에 그것을 샀습니다. 지금까지 내가 말할 수있는 것은 그가 시작하는 방식을 승인한다는 것입니다. 적어도 C ++을 어떻게 사용 해야하는지에 대한 좋은 소개입니다.


답변

현재 내가 참여하고있는 프로젝트를 진행하는 동안, 상당한 기간 (10 년 이상)에 걸쳐 발전한 많은 C ++ 코드가 있습니다. 당신이 말하는 진화는 분명히 눈에 보인다. 오래된 코드는 종종 “클래스를 가진 C”-원시 포인터, char*문자열 및 관련 C 함수, 배열 등의 사용; 최신 코드는 ATL 스마트 포인터 등을 사용하여 리소스를 관리하지만 여전히 대부분의 경우 수작업으로 작성된 루프를 고수하며 반복자는 거의 보이지 않습니다. 최신 버전은 STL 컨테이너, 알고리즘,shared_ptr(핸들 등을 관리하기위한 커스텀 삭제 도구 포함), 고도로 일반화 된 함수 및 클래스 템플릿 등. 수동 평생 관리 기능이있는 원시 캡슐화되지 않은 포인터와 같은 대부분의 “클래스가있는 C”코딩 기술은 요즘 코드 검토에서 매우 눈살을 찌푸립니다. 이것으로 판단하면, 당신의 관찰은 정확한 것 같습니다.

가장 최근의 개발은 C ++ 0x 람다에 대한 유행으로 보입니다. 이는 또한 코드를 직접 코딩 할 수 있기 때문에 수작업으로 코딩 된 루프보다 표준 알고리즘을 사용하기 위해 균형을 기울입니다. 알고리즘도 마찬가지입니다.