2017-03-08 7 views
-1

상수 :선언 문자열 선언의 장점이 무엇

static constexpr const char* K = "k"; 

대 :

static const std::string K("k"); 

감사

큰 차이가 있습니다
+0

글쎄, 첫 번째 것은 분명히 컴파일 타임 상수 표현식 인 반면, 두 번째 것은 런타임에 동적 메모리를 할당합니다. 그것은 모두 귀하의 유스 케이스에 달려 있습니다. – DeiDei

+0

따라서 첫 번째 양식의 결정적인 이점은 무엇입니까? – Ted

답변

0

, 그것은 당신의 코드에 영향을 얼마나 많은 것들에 따라 달라집니다. 일반적으로 두 번째는 std :: string 객체가 생성되거나 소멸 될 때 보장 할 수 없다는 사실 때문에 권장되지 않습니다.

는 가장 Google C++ Style Guide로 요약된다 : 정적 저장 기간이 클래스 형의

변수가 금지됩니다 그들은 생성과 소멸의 불확정 순서에 따른 찾기 어려운 버그를 발생합니다. 그러나 이러한 변수는 constexpr 인 경우 허용됩니다. 동적 초기화 또는 삭제가 없습니다.

전역 변수, 정적 변수, 정적 클래스 멤버 변수 및 함수 정적 변수를 포함하여 정적 저장 기간이있는 객체는 POD (Plain Old Data)이어야합니다. int, chars, float 또는 pointers 또는 arrays/structs 만 가능합니다. POD의

그들은 두 번째를 금지 :

우리는 정적 변수는 POD 데이터를 포함 할 수 있도록 결과. 이 규칙은 std :: vector (C 배열을 대신 사용) 또는 string (const char [] 사용)을 완전히 허용하지 않습니다.

+0

Google은 C++에 대한 권한으로 간주되지 않습니다. 예를 들어, C 배열을'std :: vector'에 대한 대안으로 제안하는 것은'std :: array'를 완전히 무시하고 있습니다. – MSalters