다음 코드에서 템플릿 구조 BB 및 CC는 생성자를 제외하고 거의 동일합니다. 템플릿 BB는 아무것도하지 않는 생성자를 사용하지만 템플릿 CC는 기본 생성자를 사용합니다."빈"생성자 대 암시 적 생성자
'사용'인스턴스 2 ' 뿐만 아니라 '예'를 초기화 할 때오류 C4700 : 나는 비주얼 스튜디오 2013 업데이트 4를 사용하여 컴파일 할 때 오류가 아니라
constInst
를 선언 라인에constInst2
를 선언 라인에 발생합니다 초기화되지 않은 지역 변수를
나는 같은 오류를 기대했다. 나는 this sentence?
"암시 적 선언 기본 생성자가 삭제되지 않는 경우 또는을 잘못 해석하고 있는가 0 사소한 것이 (즉, 기능 체가 생성되고 컴파일) 정의 컴파일러 및 비어 본체 빈 초기화리스트와 사용자 정의 생성자와 완전히 같은 효과를 갖는다. "
struct AA
{
typedef int a;
typedef const int b;
};
template< typename A >
struct BB
{
typename A::a a_A;
typedef typename A::b a_B;
BB()
{};
};
template< typename A >
struct CC
{
typename A::a a_A;
typedef typename A::b a_B;
CC() = default;
};
int main()
{
BB<AA> instance;
BB<AA>::a_B constInst(instance.a_A);
CC<AA> instance2;
CC<AA>::a_B constInst2(instance2.a_A);
return 0;
}
특정 컴파일러 오류에 대해 질문 할 때 질문에 전체 오류 메시지를 포함하십시오. 그것은 많은 도움이됩니다. –
@ MarkRansom : 질문을 업데이트했습니다. – Hector
@Hector 나는 여러분의 코드를 그대로 사용하여 Visual Studio 2013 Update 4와 함께 컴파일하고 경고 만 받았다 :'경고 C4700 : 초기화되지 않은 지역 변수 'instance2'used' 또한 http : // ideone으로 문제없이 컴파일됩니다. com/Hc1jB4 – PaulMcKenzie