在以下代碼中,除構造函數外,模板結構BB和CC幾乎相同。模板BB使用一個不做任何事的構造函數,而模板CC使用默認的構造函數。當我使用Visual Studio 2013更新4編譯它,拋出一個錯誤在聲明constInst2
但不能在聲明constInst
行線:隱式構造函數與「空」構造函數
錯誤C4700:未初始化的局部變量「INSTANCE2」使用」
初始化「實例」,以及當我希望同樣的錯誤。我是不是誤解this sentence?
「如果隱式聲明的默認構造函數沒有被刪除或 瑣碎,它被定義(即,產生一個函數體和 編譯)由編譯器,它具有恰好與空體和空初始化列表一個 用戶定義的構造相同的效果。」
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;
}
當詢問有關特定編譯器錯誤的問題時,請在問題中包含完整的錯誤消息。它有很多幫助。 – 2014-12-01 20:55:10
@MarkRansom:更新了問題。 – Hector 2014-12-01 20:57:56
@Hector我把你的代碼逐字記錄下來,用Visual Studio 2013 Update 4進行編譯,並且只收到警告:'警告C4700:未初始化的局部變量'instance2'used'它也編譯時沒有問題:http:// ideone。 com/Hc1jB4 – PaulMcKenzie 2014-12-01 21:01:16