C ++ 표준위원회는 언어에 새 키워드를 추가하는 것을 꺼리는 경향이 있지만 C ++ 11에서는 그렇지 않습니다. 몇 가지 예 :
constexpr
decltype
thread_local
auto // New usage
noexcept
nullptr
static_assert
alignof
alignas
C ++ 14에 도입 된 새로운 키워드가 있습니까?
C ++ 표준위원회는 언어에 새 키워드를 추가하는 것을 꺼리는 경향이 있지만 C ++ 11에서는 그렇지 않습니다. 몇 가지 예 :
constexpr
decltype
thread_local
auto // New usage
noexcept
nullptr
static_assert
alignof
alignas
C ++ 14에 도입 된 새로운 키워드가 있습니까?
답변:
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.)
register
키워드는 여전히 유용하거나 새로운 C ++ 11 코드에 사용?
비슷한 질문에 대한 답변을 찾는 도구를 제공하기 위해이 답변을 게시하고 있습니다.
표준 초안은 현재 공개 GitHub 저장소에 보관됩니다. 즉, GitHub 자체에이 질문을 할 수 있습니다!
키워드 테이블은 파일에 source/lex.tex
있습니다. 당신이 그것을 비난한다면, 우리는 키워드 테이블에 대한 마지막 변경이 2011 년 8 월로 거슬러 올라간다는 것을 알 수 있습니다 (실제로 첫 번째 커밋입니다 : 그 테이블은 C ++ 11 즈음에 리포지토리가 활성화 된 이후로 변경되지 않았습니다. 완료되었습니다).
또는 표준의 두 버전 인 N3337 및 N3936에 대해 투표를 위해 전송 된 두 초안을 GitHub에 비교하도록 요청할 수 있습니다. 이 둘 사이 의 차이 는에 대한 변경 사항 lex.tex
이 키워드 테이블에서 아무것도 변경하지 않았 음 을 보여줍니다 .
C ++ 14에는 새 키워드가 추가되지 않습니다. 이것은 C ++ 14가 주로 버그를 정리하고 작고 영향이 적은 개선을 만드는 데 관여하는 C ++ 11 로의 작은 업그레이드로 의도 되었기 때문에 놀라운 일이 아닙니다. 다음 주요 변경 사항은 C ++ '17'일 가능성이 높으며 다시 한 번 새로운 키워드를 기대합니다.
C ++ 표준위원회는 언어에 새 키워드를 추가하는 것을 꺼리는 경향이 있지만 C ++ 11에서는 그렇지 않습니다.
위원회가 새 키워드를 추가하지 않는 이유를 고려해 볼 가치가 있다고 생각합니다 (그리고 공동으로 auto
목록 에 포함 하는 것이 잘못된 이유 ). 새 키워드의 주요 문제는 C ++에서 키워드를 식별자로 사용할 수 없다는 것입니다. 즉, 새 키워드를 추가하면 기존 코드가 손상됩니다. 용도 변경 auto
기존의 코드를 사용하지 수 있기 때문에, 다음, 자신의 규칙을 파괴하지 않는 auto
식별자로 어쨌든 .
따라서 새 키워드를 받아들이려면 기존 코드와의 잠재적 충돌 비용을 능가하는 정당성이 있어야하며 새 키워드없이 동일한 것을 구현하는 합리적인 방법이 없어야합니다. C ++ 11의 경우,위원회는 새로운 키워드를 추가하는 것을 싫어하지 않기 때문이 아니라 이익이 비용보다 크다고 생각했기 때문에 새로운 키워드가 필요한 몇 가지 제안을 수락했습니다.
또한 제공 한 목록을 아래로 보면 각 키워드가 기존 식별자와 충돌 할 가능성이 줄어들 기 때문에 복합 키워드 가되는 이유이기도 합니다.