int = int ();c++ 98中发生了什么

int a=int(); what happens in C++98?

本文关键字:int 发生了 什么 c++      更新时间:2023-10-16

请仔细阅读问题,然后再标记为重复。像

这样的语句

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中引入的。那么这里i是如何初始化的呢?它真的是构造函数调用吗?Int()看起来像构造函数调用。正如Bjarne stroustrup在他的《c++编程语言&》一书中所说,c++中的基本类型也有默认构造函数。TC + + PL .

c++编程语言Bjarne stroustrup:

内置类型也有默认构造函数

也读同一本书的6.2.8节。

下面的链接还说明了在c++中内置类型有默认构造函数。

1) http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=15

http://www.geeksforgeeks.org/c-default-constructor-built-in-types/

2)

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

5.2.3显式类型转换(函数表示法)

2表达式T(),其中T是非数组完整对象类型或(可能是cv限定的)void类型的简单类型说明符(7.1.5.2),创建指定类型的右值,其值由default-initialization (8.5;void()情况下不进行初始化)。[…]

8.5初始值设定项

5[…要默认初始化类型为T的对象意味着:

——如果T是非pod类类型(子句9),则默认构造函数为调用T(如果T没有可访问的默认构造函数,则初始化是错误的);

——如果T是数组类型,每个元素默认初始化;

——否则,对象的存储空间为零初始化。

没有问题。从第一个c++标准开始,int()就被保证求值为零。它是通过默认初始化而不是值初始化发生的,这是一个与你的问题完全无关的技术细节。