N3257에서이없는 생성자없이 멤버를 초기화하는 예제를 발견했습니다. POD이기 때문에 가능하다고 생각합니다.C++ 0x 생성자없는 멤버 초기화
template<typename T>
struct adaptor {
NonStdContainer<T>& ptr; // <- data member, now REF
T* begin() { return ptr->getFirst(); }
T* end() { return ptr->getLast() + 1; }
};
void f(NonStdContainer<int>& c) {
for (auto i : adaptor<int>{c}) // <- init
{ /* ... */ }
}
이 GCC-4.7와 경고없이 벌금과 컴파일 : 나는 원시 포인터를 싫어하기 때문에이 예제와 함께 놀았
template<typename T>
struct adaptor {
NonStdContainer<T>* ptr; // <- data member
T* begin() { return ptr->getFirst(); }
T* end() { return ptr->getLast() + 1; }
};
void f(NonStdContainer<int>& c) {
for (auto i : adaptor<int>{&c}) // <- init
{ /* ... */ }
}
는 I는 &
으로 *
을 교체했다. 0. 그렇다면 POD 초기화에 대해 궁금해하고 C++ 0x로 변경되었을 수 있습니다. Bjarnes FAQ을 발견했습니다. 그는 POD가 포인터을 포함 할 수도 있지만 참조을 포함 할 수 없다고 말합니다.
옵스는, 지금은 궁금해 :
- 내가 컴파일러는 생성자없이 어쨌든를 초기화 할 수있는, 여기에 비 POD-개체가 난 그냥 여기에 사용되는 메커니즘을 그리워합니까?
- 또는 GCC-4.7.0이 non-std처럼 동작합니까?이 방법으로 참조를 초기화 할 수 있습니까?
- 또는 Bjarnes FAQ에서 POD에서 참조를 허용하기 때문에 표준이 변경 되었습니까?
업데이트 : 발견집계 현재 표준에 (8.5.1 집계 [dcl.init.aggr])하지만, 참고 문헌이 언급되지 않은, 그래서 나는 확실하지 않다 어떻게 표준 [dcl.init.aggr] 인용이
나는 당신과 동의하는 경향이있다. 나는이 질문을하고 POD와의 차이를 알지 못하고 * aggregates +의 정의를 발견했다. – towi
@towi : 초기화를 살펴 보는 것이 가장 좋습니다. 집계를 직접 참조합니다. – jpalecek