【发布时间】:2015-06-02 18:11:44
【问题描述】:
在您认为将其标记为重复之前,请完整阅读该问题。像这样的声明
int i=int();
大多数程序员会说这里有值初始化 & i 将被初始化值。 (0作为输出)。但它也会在 C++98 编译器上打印 0 作为输出。
下面是我在 C++98 实现上测试的程序,并给了我 0 作为输出。
#include <iostream>
int main()
{
int i=int();
std::cout<<i;
}
不要说i是上面C++98程序中初始化的值,因为C++03中引入了值初始化。那么我是如何在这里初始化的呢?真的是构造函数调用吗? int() 看起来像构造函数调用。正如 Bjarne stroustrup 在他的《C++ 编程语言和 TC++PL》一书中所说,原始类型在 C++ 中也有默认构造函数。
C++ 编程语言 Bjarne stroustrup:
10.4.2 内置类型也有默认构造函数
还阅读了同一本书的第 6.2.8 节。
以下链接还表明内置类型在 C++ 中具有默认构造函数。
1)http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=15
2) http://www.geeksforgeeks.org/c-default-constructor-built-in-types/
那我真的可以说是整数类型的构造函数调用吗?
【问题讨论】:
-
@vsoftco:这怎么可能?
-
我所知道的没有(相对较新的)编译器具有实际的 C++98 模式。
-
我不会为你挖掘历史,但如果值初始化的概念是作为纠正 C++98 行为的缺陷报告引入的,那么编译器将追溯实现它,即使对于C++98 模式。无论如何,为什么 C++98 和 C++03 之间的区别甚至很重要?接受后者作为 C++ 11 之前的标准化后 C++。
-
大多数编译器不区分 C++03 和 C++98。前者实际上是后者的错误修复,因此编译器倾向于将它们合并在一起,如果您要求 C++98,则为您提供 C++03
标签: c++ constructor c++98 built-in-types