Visual Studio 2010 是否执行零初始化?
Does Visual Studio 2010 perform zero-initialization?
C++11 允许使用表达式 T();
(http://en.cppreference.com/w/cpp/language/zero_initialization) 将值初始化为零。 Visual Studio 2010 是否支持此功能?我 运行 比较了 T x;
和 T x = T();
的一些实验,我得出结论,后一种情况确实将值初始化为零,但我不确定我是否可以依赖它。
VS2010 文档中有提到零初始化吗? VS2010 Initializers 页面 (https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.100).aspx) does not mention it, unlike pages for later versions, e.g., VS2013 (https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.120).aspx).
这是该语言从一开始就存在的基本行为。它没有在 C++11 中引入(在该 cppreference 页面上,请注意 "since C++11" 仅与使用 (2) 下的第三个示例对齐;当然它不是很清晰)。
如果 T
是 int
并且 T()
没有导致临时值 int
为零(这是 zero-initialisation via value-initialisation),编译器会有一个非常严重的错误。我确定 Visual Studio 没有这个错误。
至于证明,VS2010 文档似乎没有在标准提到它的同一位置(即在 explicit type conversion 表达式部分下)提到此行为。当然,随着时间的推移,他们的文档可能 changed/evolved/become 更加详尽,尤其是 C++ 本身添加了越来越多的初始化方法。
C++11 允许使用表达式 T();
(http://en.cppreference.com/w/cpp/language/zero_initialization) 将值初始化为零。 Visual Studio 2010 是否支持此功能?我 运行 比较了 T x;
和 T x = T();
的一些实验,我得出结论,后一种情况确实将值初始化为零,但我不确定我是否可以依赖它。
VS2010 文档中有提到零初始化吗? VS2010 Initializers 页面 (https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.100).aspx) does not mention it, unlike pages for later versions, e.g., VS2013 (https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.120).aspx).
这是该语言从一开始就存在的基本行为。它没有在 C++11 中引入(在该 cppreference 页面上,请注意 "since C++11" 仅与使用 (2) 下的第三个示例对齐;当然它不是很清晰)。
如果 T
是 int
并且 T()
没有导致临时值 int
为零(这是 zero-initialisation via value-initialisation),编译器会有一个非常严重的错误。我确定 Visual Studio 没有这个错误。
至于证明,VS2010 文档似乎没有在标准提到它的同一位置(即在 explicit type conversion 表达式部分下)提到此行为。当然,随着时间的推移,他们的文档可能 changed/evolved/become 更加详尽,尤其是 C++ 本身添加了越来越多的初始化方法。