在以下代码中,除构造函数外,模板结构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