, 나는 정의하려면 몇 가지 로컬이 아닌 다른 클래스, 함수, 파일, 내가 알고 접근 방법에서 사용할 수있는 const를 문자열 :은 static const string 멤버 변수로 사용하기 전에 항상 초기화됩니까? C++에서
사용 지침을 정의, 예를 들어,
#define STR_VALUE "some_string_value"
const 클래스 멤버 변수
class Demo { public: static const std::string ConstStrVal; }; // then in cpp std::string Demo::ConstStrVal = "some_string_value";
const 클래스 멤버 함수. 우리는 두번째 방법을 사용하는 경우가 실제로 어떤 경우에 어떤 코드를 사용하기 전에
class Demo{ public: static const std::string GetValue(){return "some_string_value";} };
지금 무엇을 나는 확실하지 오전, 변수 ConstStrVal는 항상 "some_string_value"로 초기화된다? 나는 "static initialization order fiasco" 때문에 이것을 염려합니다. 이 문제가 타당하다면 왜 2 번 접근법을 사용하고 있습니까?
2 또는 3 중 어느 것이 가장 좋습니다. #define 지시어에는 범위에 대한 존중이 없으므로 대부분의 사람들은 범위를 추천하지 않습니다.
감사합니다.
나는이 대답을 좋아한다. 내가 이해할 수없는 한 가지는, 스택 오버플로에서의 대답을 잠시 동안 찾았습니다. 대부분의 사람들은 접근 방식 2를 언급하지만, 거의 접근하지 않습니다. – Hunter
@Hunter 이름은 "처음 사용할 때의 구조"입니다. 그 희망을 연구하면 도움이됩니다. – justin