cppreference.com은 The default constructor is defaulted
입니다. 또한 C++14 draft
을 확인했는데 선언을 제외하고 기본 생성자에 아무 것도 말하지 않았습니다. constexpr duration() = default;
std :: chrono :: duration은 어떻게 생성됩니까?
다음 코드를 실행하면 놀랐습니다. 그래서 140737364037104
, 140737078676496
과 :
chrono::seconds s;
cout << s.count() << endl;
나는 그것을 실행할 때마다
, 프로그램은 어떤 임의의 숫자를 인쇄합니다.s
잘 초기화되지 않은 것 같습니다. 그런 다음 std::chrono::duration
에 대한 컴파일러 (GCC 4.8)의 구현을 확인했습니다. 이 클래스에는 int 클래스의 데이터 멤버 (즉, count
)가 클래스 내 이니셜 라이저없이 있습니다. 생성자는 기본값으로 생성됩니다. 따라서 데이터 멤버는 실제로 초기화되지 않습니다. 이것이 프로그램이 항상 임의의 숫자를 인쇄하는 이유입니다.
- 이 올바른 행동인가요 :
다음은 내 질문입니까? 아니면 컴파일러는 데이터 멤버에게 클래스 이니셜 라이저를 제공해야합니까?
- 이것이 올바른 행동 인 경우,
std::chrono::duration
에 대해 표준에서 기본값 :0
을 지정하지 않는 이유는 무엇입니까?
무엇이 질문입니까? 이것은'int a;와 다르지 않습니다. 그 맥락에서 디폴트 초기화를 이해한다면, 당신은'duration' 상황을 이해할 것입니다. –