int a = int(); 在C++ 98中会发生什么?

Des*_*tor 8 c++ constructor built-in-types c++98

在您考虑将其标记为重复之前,请完整阅读该问题.声明就像

int i=int();

大多数程序员会说这里有值初始化,我将初始化值.(0作为输出).但它也在C++ 98编译器上输出0作为输出.以下我在C++ 98实现上测试的程序并给出了0作为输出.

#include <iostream>
int main()
{
     int i=int();
     std::cout<<i;
}
Run Code Online (Sandbox Code Playgroud)

不要说我在上面的C++ 98程序中初始化了值,因为在C++ 03中引入了值初始化.那我怎么在这里初始化?它真的是构造函数调用吗?int()看起来像构造函数调用.原始类型也有C++中的默认构造函数,正如Bjarne stroustrup在他的C++编程语言和TC++ PL中所说的那样.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/

那么我真的可以说它是整数类型的构造函数调用吗?

小智 10

5.2.3显式类型转换(功能表示法)

2表达式T(),其中T是非数组完整对象类型的简单类型说明符(7.1.5.2)或(可能是cv限定的)void类型,创建指定类型的rvalue,其值默认确定- 初始化(8.5;不对void()案例进行初始化).[...]

8.5初始化器

5 [...] 默认初始化类型对象T意味着:

- 如果T是非POD类类型(第9节),T则调用默认构造函数 (如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是数组类型,则每个元素都是默认初始化的;

- 否则,对象的存储被零初始化.

没有问题.int()从第一个C++标准开始,我们一直保证评估为零.它通过默认初始化而不是值初始化发生的事实是一个与您的问题完全无关的技术细节.