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

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

( overridefinal은 "특별한 의미를 가진 식별자"이며 표 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.