VS2012 在模板对象上使用的未初始化局部变量 'a' class
uninitialized local variable 'a' used by VS2012 on the object of a template class
在 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);
}
I tested it in gcc4.4.7, it's fine.
你觉得什么意义上的好?您永远不会设置值 a.p,因此代码可能会编译,但即使使用 gcc,它仍然是垃圾数据。
默认情况下,C4700 是一个警告,而不是一个错误,因此您可以使用 gcc 可能编译它的相同的错误方式来编译它。您只需 /WX
设置将警告视为错误,这是一个很好的做法。
在 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);
}
I tested it in gcc4.4.7, it's fine.
你觉得什么意义上的好?您永远不会设置值 a.p,因此代码可能会编译,但即使使用 gcc,它仍然是垃圾数据。
默认情况下,C4700 是一个警告,而不是一个错误,因此您可以使用 gcc 可能编译它的相同的错误方式来编译它。您只需 /WX
设置将警告视为错误,这是一个很好的做法。