在你想把问题标记为重复之前,请先把问题看一遍。像这样的陈述
int i=int();
大多数程序员会说这里存在值初始化& i将被初始化。(0作为产出)。但是它也在C++98编译器上打印0作为输出。下面是我在C++98实现上测试的程序,并给我0作为输出。
#include <iostream>
int main()
{
int i=int();
std::cout<<i;
}不要说我是在上面的C++98程序中初始化的,因为值初始化是在C++03中引入的。我是如何在这里初始化的?它真的是构造函数调用吗?int()看起来像构造函数调用。原语类型在C++中也有默认构造函数,正如Bjarne在他的书“C++编程语言& TC++PL”中所说的那样。
C++编程语言Bjarne:
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/
那么,我真的可以说它是一个整数类型的构造函数调用吗?
发布于 2015-06-02 18:20:48
5.2.3显式类型转换(函数表示法) 2表达式
T(),其中T是非数组完整对象类型或(可能是cv限定的)空类型的简单类型说明符(7.1.5.2),它创建指定类型的rvalue,其值由默认初始化(8.5;不对void()情况进行初始化)确定。..。 8.5初始化器 5 ..。默认情况下-初始化T类型的对象意味着: --如果T是非POD类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化格式不正确); -如果T是数组类型,则每个元素都是默认初始化的; --否则,对象的存储将为零初始化。
没有问题。int()已经被保证从第一个C++标准开始计算到零。它是通过默认初始化而不是值初始化发生的,这是一个与您的问题完全无关的技术细节。
https://stackoverflow.com/questions/30603512
复制相似问题