정적 멤버가있는 클래스가 있습니다. 이것은 같은 클래스의 private static 함수를 사용해 초기화됩니다.정적 구성원 초기화 중 개인 정적 함수에 대한 액세스
#include <iostream>
#include <string>
class A
{
public:
static std::string const s;
private:
static std::string make()
{
return "S";
}
};
std::string const A::s = A::make();
int main()
{
std::cout << A::s << std::endl;
// std::cout << A::make() << std::endl; // <-- Does not work
return 0;
}
내 질문 : 어떤 규칙이 허용 되었습니까? 클래스 외부의 개인 함수에 액세스 할 수 없으므로 분명히 주석 부분이 작동하지 않습니다. 그렇다면 왜 스타트 업 중에 private static 멤버의 초기화가 특별한 경우입니까? (그리고이 메모의 의도는 무엇입니까?이 정확한 경우를 허용할까요?)
고정 멤버를 초기화하는 다른 메커니즘 (예 : Initializing private static members)을 알고 있습니다. 그러나 제 경우에는 구성원이 const입니다. 그래서 제가 설정하는 유일한 방법은 정의의 장소에서 직접적인 초기화를 통해서라는 것입니다.
const에 관한 내용은 맞습니다. 질문을 수정했습니다. 감사. –
"정적 데이터 멤버의 초기화는 정적 데이터 멤버가 네임 스페이스 범위 (클래스 정의 외부)에서 정의 되더라도 클래스의 특성화의 일부로 간주됩니다."라고 분명히 생각합니다. ("클래스 정의"는 C++ 표준에서 매우 공식적인 의미가 있기 때문에 "특성화"를 사용했습니다.) –
@MartinBonner Fine. – songyuanyao