C ++ 14는 C ++에 새 키워드를 추가합니까?


103

C ++ 표준위원회는 언어에 새 키워드를 추가하는 것을 꺼리는 경향이 있지만 C ++ 11에서는 그렇지 않습니다. 몇 가지 예 :

constexpr
decltype
thread_local
auto // New usage
noexcept
nullptr
static_assert
alignof
alignas

C ++ 14에 도입 된 새로운 키워드가 있습니까?

답변:


135

N3936 (C ++ 14)의 표 4 (키워드) :

alignas           continue          friend            register          true
alignof           decltype          goto              reinterpret_cast  try
asm               default           if                return            typedef
auto              delete            inline            short             typeid
bool              do                int               signed            typename
break             double            long              sizeof            union
case              dynamic_cast      mutable           static            unsigned
catch             else              namespace         static_assert     using
char              enum              new               static_cast       virtual
char16_t          explicit          noexcept          struct            void
char32_t          export            nullptr           switch            volatile
class             extern            operator          template          wchar_t
const             false             private           this              while
constexpr         float             protected         thread_local
const_cast        for               public            throw

N3337 (C ++ 11)의 표 4 :

alignas           continue          friend            register          true
alignof           decltype          goto              reinterpret_cast  try
asm               default           if                return            typedef
auto              delete            inline            short             typeid
bool              do                int               signed            typename
break             double            long              sizeof            union
case              dynamic_cast      mutable           static            unsigned
catch             else              namespace         static_assert     using
char              enum              new               static_cast       virtual
char16_t          explicit          noexcept          struct            void
char32_t          export            nullptr           switch            volatile
class             extern            operator          template          wchar_t
const             false             private           this              while
constexpr         float             protected         thread_local
const_cast        for               public            throw

... 그것은 "아니오"라고 말하는 장황한 방법입니다.

( override및 final은 "특별한 의미를 가진 식별자"이며 표 3에 나열되어 있습니다. and등은 "특정 연산자 및 구두점에 대한 대체 표현"이며 표 5에 나열되어 있습니다. C ++ 11과 C ++간에 테이블이 변경되지 않음) 14.)


2
모든 번역 단위의 전역 네임 스페이스에 배치되기 때문이라고 말하고 싶습니다. (그래, 당신은 ... 다음 잘 그 이유를 물어, 수)
— R. 마르틴 페르난데스에게

2
는 IS register키워드는 여전히 유용하거나 새로운 C ++ 11 코드에 사용?
— Walter

2
@Walter 어쨌든 컴파일러에서 더 이상 사용되지 않으며 널리 무시됩니다.
— TC

1
다른 토큰 논리 연산자에 대한이 해당 테이블에 언급되지 않은? C ++ 키워드가 아닙니까?
— Nikos Athanasiou

1
@NikosAthanasiou,이 IIRC 바로 아래에 테이블이 있습니다.
— chris

85

비슷한 질문에 대한 답변을 찾는 도구를 제공하기 위해이 답변을 게시하고 있습니다.

표준 초안은 현재 공개 GitHub 저장소에 보관됩니다. 즉, GitHub 자체에이 질문을 할 수 있습니다!

키워드 테이블은 파일에 source/lex.tex있습니다. 당신이 그것을 비난한다면, 우리는 키워드 테이블에 대한 마지막 변경이 2011 년 8 월로 거슬러 올라간다는 것을 알 수 있습니다 (실제로 첫 번째 커밋입니다 : 그 테이블은 C ++ 11 즈음에 리포지토리가 활성화 된 이후로 변경되지 않았습니다. 완료되었습니다).

또는 표준의 두 버전 인 N3337 및 N3936에 대해 투표를 위해 전송 된 두 초안을 GitHub에 비교하도록 요청할 수 있습니다. 이 둘 사이 의 차이 는에 대한 변경 사항 lex.tex이 키워드 테이블에서 아무것도 변경하지 않았 음 을 보여줍니다 .


1
감사합니다! 오늘까지 아직 변경 사항이없는 것 같습니다.
— sbi

34

C ++ 14에는 새 키워드가 추가되지 않습니다. 이것은 C ++ 14가 주로 버그를 정리하고 작고 영향이 적은 개선을 만드는 데 관여하는 C ++ 11 로의 작은 업그레이드로 의도 되었기 때문에 놀라운 일이 아닙니다. 다음 주요 변경 사항은 C ++ '17'일 가능성이 높으며 다시 한 번 새로운 키워드를 기대합니다.

C ++ 표준위원회는 언어에 새 키워드를 추가하는 것을 꺼리는 경향이 있지만 C ++ 11에서는 그렇지 않습니다.

위원회가 새 키워드를 추가하지 않는 이유를 고려해 볼 가치가 있다고 생각합니다 (그리고 공동으로 auto목록 에 포함 하는 것이 잘못된 이유 ). 새 키워드의 주요 문제는 C ++에서 키워드를 식별자로 사용할 수 없다는 것입니다. 즉, 새 키워드를 추가하면 기존 코드가 손상됩니다. 용도 변경 auto기존의 코드를 사용하지 수 있기 때문에, 다음, 자신의 규칙을 파괴하지 않는 auto식별자로 어쨌든 .

따라서 새 키워드를 받아들이려면 기존 코드와의 잠재적 충돌 비용을 능가하는 정당성이 있어야하며 새 키워드없이 동일한 것을 구현하는 합리적인 방법이 없어야합니다. C ++ 11의 경우,위원회는 새로운 키워드를 추가하는 것을 싫어하지 않기 때문이 아니라 이익이 비용보다 크다고 생각했기 때문에 새로운 키워드가 필요한 몇 가지 제안을 수락했습니다.

또한 제공 한 목록을 아래로 보면 각 키워드가 기존 식별자와 충돌 할 가능성이 줄어들 기 때문에 복합 키워드 가되는 이유이기도 합니다.


1
"C ++ '17'에서 다시 한 번 새로운 키워드를 기대합니다.": C ++는 결국 성장을 멈출까요?
— Giorgio

2
@Giorgio 소프트웨어와 하드웨어는 결국 진화를 멈출 것인가? 여기서 큰 딜레마는 대담한 결정을 내리고 "오래된"구문을 버리고, 오래된 코드를 깨고 언어의 진화 된 부분으로 진행할 수 있는지 여부입니다. 파이썬은 좀 그렇게하려고
— Lorah Attkins에게

2
@NorahAttkins : 분명히 소프트웨어는 진화해야하지만 언어를 무한정 성장시키는 것이 유일한 해결책은 아닙니다. 특정 틈새 시장에서 언어가 성숙되면 항상 호환성을 깨고 새로운 틈새 시장의 요구를 충족시키기 위해 새로운 언어를 시작할 수 있습니다. Python이 한 예입니다. 다른 예로는 C ++-> Java, Java-> Scala, Common Lisp-> Clojure, C ++-> D가 있습니다. 일부 언어는 커뮤니티가 자신이 가장 좋아하는 언어가 유일한 진정한 언어이며 원하는 언어라고 확신하기 때문에 무한히 성장합니다. 가능한 모든 응용 분야에 적합합니다. 물론 이러한 기대는 현실적이지 않습니다.
— Giorgio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.