2015-04-25 64 views
1

在VS2012的物体上使用VS2012,下面的代码无法编译,它说 error C4700: uninitialized local variable 'a' used上线A<int> b(a); 我在gcc4.4.7测试它,它的罚款。未初始化的局部变量“一个”模板类

我以为阻止编译器生成默认构造函数的东西,但它似乎只是VS2012的问题。为什么它会给出这个错误,关于编译器如何处理代码的任何解释?

template<typename T> 
class A 
{ 
public: 
    T* p; 
}; 

int main() 
{ 
    A<int> a; 
    A<int> b(a); 
} 
+0

'a.p'未初始化。原始指针的默认构造函数是将其保留为未初始化状态。 –

回答

0

我测试了它在gcc4.4.7,它的罚款。

你觉得这样很好吗?你从不设置值a.p,所以代码可以编译,但即使使用gcc,它仍然是垃圾数据。

默认情况下,C4700是一个警告,不是错误,所以你可以用gcc编译它的方式来编译它。您只需设置/WX即可将警告视为错误,这是良好的做法。