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

时间:2015-06-02 18:11:45

标签: c++ constructor c++98 built-in-types

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

int i=int();

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

#include <iostream>
int main()
{
     int i=int();
     std::cout<<i;
}

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

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

1 个答案:

答案 0 :(得分:9)

  

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

     

2表达式{​​{1}},其中if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { UIApplication.sharedApplication().openURL(requestUrl) } 是非数组完整对象类型的简单类型说明符(7.1.5.2)或(可能是cv限定的)void类型,指定类型的右值,其值由下式确定   default-initialization(8.5;没有为T()情况进行初始化)。 [...]

     

8.5初始化程序

     

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

     

- 如果void()是非POD类类型(第9节),则为默认构造函数   调用T(如果T没有可访问的默认构造函数,则初始化格式不正确);

     

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

     

- 否则,对象的存储空间为零。

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

相关问题