在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 :(得分:0)
我在gcc4.4.7中测试过它,没关系。
你认为它在哪种方面很好?你永远不会设置值a.p所以代码可以编译,但即使使用gcc它仍然是垃圾数据。
默认情况下,C4700是一个警告,而不是一个错误,因此您可以使用gcc编译它的相同方式进行编译。您只需将/WX
设置为将警告视为错误,这是一种良好做法。