C ++ '11이 승인되면 C ++ 초보자가 언어를 배우는 방법이 변경됩니까? [닫은]


21

나는 잠시 동안 C ++을 배우고 싶었고 고등학교에서 AP 컴퓨터 프로그래밍을했다 (Java가 아닌 C ++ 일 때). 나는 C를 즐기고 C ++을 배울 시간을 찾지 못했거나 훨씬 더 생산적인 C #으로 돌아갈 것입니다.

내 질문은 이것입니다 : C ++ '11이 승인되었으므로 (완전히 구현되지는 않았지만) C ++ 학습에 접근 해야하는 방식이 변경됩니까? 본인은 C ++ : 1998 년 의 완전한 참조 인 Herb Schildt 를 소유하고 있습니다. 새로 승인 된 표준으로 인해 표준의 내용이 포함 된 최신 자습서 / 책보다 그러한 책에서 배우는 것이 덜 중요합니까? 오래된 책에서 배우면 어떤 유익이 있습니까?


9
돈. 차일드. 나는 그의 C ++ 재료의 품질에 대해 말할 수는 없지만 그의 C 재료는 오랫동안 하위 표준 이었습니다 (최신 버전의 C : TCR조차 여전히 사소한 오류가 거의 없습니다). 다른 저자의 최신 작품을 찾아 보는 것이 좋습니다.
John Bode

C ++ 11은 최신 개정판에서 소개되었지만 이전 버전의 C ++에는없는 것을 수행하기 위해 배워야하는 C ++의 기본 사항을 변경하지 않았습니다.
Ramhound

11
Herb Schildt의 책을 절대 믿지 마십시오. 실제로 C ++ 도서의 대부분은 나쁜 책이 있지만 (여기서는 문체 문제를 언급하지 않지만, 사실적인 오류와 버그로 ​​이어지는 프로그래밍 스타일을 홍보하는 중) Schildt의 책은 매우 나빴습니다. 그의 이름은 다소 밈이되었습니다.
sbi

4
@Ramhound : 동의하지 않습니다. 그것이 사실이라면, 우리는 여전히 수동 리소스 관리를 먼저 배우고 동적 리소스를 수행하는 더 안전한 방법 만 배웁니다. 고맙게도 이것은 (천천히) 변화하고 있습니다. 새로운 가능성은 도서관에서만 "만"이더라도 새로운 관용구를 요구합니다. 언어로 시작한다면 왜 오래된 관용구를 먼저 배우고 나중에 배우지 않아도됩니까?
sbi

답변:


16

전혀. 요즘에는 2과에서 보통 3 가지가 많이 움직입니다.

  • char *, strlen, strxxx 메소드 등의 배열 인 문자열
  • 일반적으로 배열과 포인터 산술
  • 새로운 것을 삭제, 새로운 것을 삭제 [], 심지어 소멸자

제 99과에서 보통 이런 것들이 훨씬 빨리 움직여야합니다

  • 사용할 것으로 템플릿 사용
  • std :: string
  • std :: shared_ptr <>
  • std :: vector <>, 반복자, 기타 컬렉션

Evey 원시 포인터는 즉시 스마트 포인터 래퍼에 제공해야합니다 (공유로 시작하고 std :: move 및 rvalue 참조를 설명해야하므로 나중에 고유 한 것으로 간주합니다). 이렇게하면 C ++를 배우는 것이 언어와 동시에 라이브러리를 배우는 Java 또는 C #을 배우는 것과 매우 흡사합니다. 또한 많은 메모리 작업을 제거하고 사람들이 문제를 덜 걱정하게 만듭니다.

또한 컬렉션을 처음으로 반복하고 각 요소에 대해 무언가를하고 싶을 때 람다를 그림으로 작업했습니다.

면책 조항 : 현재 Pluralsight에 대한 C ++ 코스를 작성 중이며이 접근법을 사용하고 있습니다. 마지막 모듈은 "다른 사람들의 코드를 이해하는 것"이며, char * 문자열, 수동 메모리 관리, 포인터 산술 등과 같은 혼란스러운 부분을 넣을 곳입니다.

업데이트 : C ++ 0x의 존재가 C ++ 03으로 가르쳐 줄 수있는 것들을 가르치는 이유를 묻는 사람들이 있습니다. 나는 그것이 여러 가지라고 생각합니다.

  • 컬렉션에 친숙한 진정한 스마트 포인터는 "직원 포인터 배열"과 같이 항상 새로운 / 삭제, 포인터 산술 등에 빠지게하는 원인을 제거합니다.
  • 자동 반복자 선언의 고통을 없애
  • 람다는 평범한 사람이 할 일을 가르치다
  • 구문 분석과 같이 사소한 것조차 >>템플릿의 일부 템플릿을 선언 할 때있을 수있는 문제를 제거합니다.
  • 등등

내가 보는 방식으로, 우리가 얼마 전에 C ++을 가르치는 방식에 대해 우리가 바꿀 수있는 것들이 있지만, 우리 중 일부는 여전히 폴백을 위해 구식 방법이 필요했거나 많이 가르치기 때문에 보류했습니다. 비전 지식.


3
나중에 수동 메모리 관리를 가르쳐야한다고 생각하는 이유는 무엇입니까? 알고 있어야하는 것이 중요하다고 생각하고 스마트 포인터를 배울 때 더 많은 감사를 보냅니다. 나는 C에서 메모리 관리 (및 char 배열)를 배워야했고 RAII와 std :: string을 내가 그것을하지 않아도 생각보다 훨씬 더 감사하게 만들었습니다.
Jetti

1
귀하의 예제는 주로 C ++ 03 대 C ++ 11이 아니라 C ++ 98 대 사전 표준 C ++에 적용됩니다. 람다 std::for_each()가 주어 졌을 때, 예전보다 훨씬 인기 auto가 있고 매우 중요하며 새로운 함수 선언 구문 (과 함께 decltype)이 템플릿 코드에서 상당히 많이 사용될 것이라고 생각합니다. 이것들은 현재 C ++ 서적이 가르치지 않는 것입니다. 그러나 네, 일반적으로 나는 당신에 동의합니다 ( +1). C ++ 과정을 제공하기 시작했을 때 Accelerated C ++로 시작했으며, 과정이 점점 더 많이 벗어나기 시작했지만 여전히 기본 원칙에 충실합니다.
sbi

3
@Jetti : 수동 리소스 관리는 거의하지 않으며, 그렇다면 RAII 클래스를 구현하기위한 것입니다. 나는, 그러나 않습니다 사용 하는 클래스의 많은. 그에 따르면, RAII 재료 의 사용 은 원자재를 다루는 것보다 더 중요해 보이므로 더 강조하면서 더 일찍 가르쳐야합니다.
sbi

1
@ sbi : 나는 당신에게 동의해야합니다.이 예제의 대부분은 C ++ 11에 관한 새로운 것이 아니라 2006 년의 Modern C ++ 101처럼 보입니다.
DeadMG

2
@Jetti : C ++ 마스터 링을 향한 가장 중요한 단계는 수동 메모리 관리를 피할 수있는 모든 방법을 배우는 것 입니다. "자동"메모리 관리를 어느 정도까지 수행 할 수 있는지 알게되면 "나중에"가르쳐야합니다.
jalf

9

거의 그렇습니다. 간단한 사실은 C ++ 98과 03에서는 함수형 프로그래밍에 대한 언어 지원 품질이 좋지 않기 때문에 많은 모범 사례를 근본적으로 사용할 수 없다는 것입니다. 람다가 존재하고 작동함에 따라 사람들은 기능적 인터페이스를 예전보다 훨씬 더 잘 수용하는 경향이 있으며 일반적인 프로그래밍은 이전보다 훨씬 강력합니다.

1998 년에 사람들은 C ++를 사용하여 고품질의 안전하고 빠른 코드를 작성하는 방법을 발견하기 시작했으며 많은 코드가 "C는 클래스"였습니다. C ++ 11에서 복사 및 스왑과 같은 매우 다른 관용구와 3의 규칙 (현재 5)은 잘 알려져 있고 정의 되어 있으며 이전의 표준 shared_ptr과 마찬가지로 더 많은 자원 관리 유형이 표준이되었습니다. unique_ptr간극 구멍으로.

C ++에서 훌륭한 참조 자료 목록을 보려면 이 질문 을 볼 수 있습니다 .


1
실제로 나는 1998 년보다 몇 년 일찍 "클래스를 가진 C"의 시작을 시작하지만 일반적으로 당신은 확실히 옳으며, 반년이 넘지 않을 것입니다. +1나에게서.
sbi

4

나는 당신이 언급 한 특정 책을 모른다. 그러나 일반적으로 C ++ 구문, 데이터 형식 및 OOP에 대한 모든 기본 사항은 여전히 ​​유효하다고 말할 수 있습니다. 대부분의 초보자 도서에 언급 된 STL 라이브러리도 마찬가지입니다.

1998 년 이전의 책은 C ++ 프로그래밍 스타일의 몇 가지 업데이트와 개발을 놓쳤을 수 있지만, 몇 년 동안 커뮤니티에 축적되었습니다. 최신 리소스를 조금 더 찾고 싶습니다. 좋은 시작을 제공하는 충분한 무료 온라인 자습서와 문서가 있습니다. 그들 중 일부는 C ++ 0x를 언급 할 수도 있습니다.

C ++ 0x는 앞으로 프로그래머가 언어를보고 사용하는 방법에 대해 많은 변화를 가져올 것입니다. 그러나 이것은 새로운 기능이 이해되기 시작하는보다 복잡한 프로젝트에 영향을 미칩니다. 초보자에게는 이것이 중요하지 않으며 기존 개념에 익숙해지는 데 집중할 수 있습니다. 이미 배우기에 충분합니다. 예를 들어 대부분의 초보자 도서는 템플릿에 깊숙이 들어 가지 않으므로 새로운 가변 템플릿은 현재 알아야 할 것이 아닙니다.

변경 사항 목록을 살펴볼 수도 있습니다 . 범위 기반 for 루프 와 같은 최소한 몇 가지 개념 은 초보자도 새로운 자습서에 나타날 가능성이 높습니다. 따라서 살펴볼 가치가 있습니다.


감사! 온라인이나 서적에 알맞은 자료를 알고 있습니까?
Jetti

2
아닙니다. cplusplus 사이트는 종종 좋은 코드를 작성하기를 원하는 사람에게 추천해서는 안되는 리소스로 언급되기도합니다.
DeadMG

@DeadMG 대체 웹 사이트가 있습니까?
TheLQ

@TheLQ : MSDN 참조 서 또는를 참조하십시오 cprogramming.com.
DeadMG

@ Jetti : C ++을 가르치기 위해 C ++ 11을 사용하는 자료를 알지 못합니다. 내가 본 모든 것은 C ++ 03 위에 C ++ 11을 가르칩니다. 후자를 배우려면 stackoverflow.com/questions/388242/…를 참조하십시오 .
sbi

3

물론 최신 기술을 사용하는 것이 항상 현명한 기술이지만, C ++ 11에 도입 된 변경 사항은 보트를 흔들지 않도록 설계되었습니다. C ++ (또는 일반적인 프로그래밍)을 처음 사용하는 경우 걱정할 사항이 아닙니다.

또한 전문 프로그래머라면 미래에 다른 사람의 코드로 작업 할 수 있으므로 실제로 감가 상각 된 기술이더라도 일이 작동하는 방식을 이해하는 데 항상 가치가 있습니다.


귀하의 답변에 감사드립니다. 이전 리소스를 사용할 때 이전 코드를 보는 데 도움이 될 것이라고 생각했습니다.
Jetti

lambda, auto및 비동기 함수 실행은 어떻게 "바위를 흔들어"할 수 있습니까?
sbi

1
새로운 툴의 도입과 디자인 철학의 광범위한 변화 (예를 들어 PHP
leo

1
@ leo : 동의하지 않습니다. STL, 스마트 포인터 및 풍부한 템플릿 기능의 도입으로 C ++의 주류 디자인 철학이 완전히 바뀌 었습니다. 거의 모든 부스트 라이브러리는 90 년대의 평균 C ++ 라이브러리와 완전히 다릅니다.
sbi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.