首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >int a=int();在C++98中发生了什么?

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

Stack Overflow用户
提问于 2015-06-02 18:11:44
回答 1查看 694关注 0票数 8

在你想把问题标记为重复之前,请先把问题看一遍。像这样的陈述

int i=int();

大多数程序员会说这里存在值初始化& i将被初始化。(0作为产出)。但是它也在C++98编译器上打印0作为输出。下面是我在C++98实现上测试的程序,并给我0作为输出。

代码语言:javascript
运行
复制
#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/

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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++标准开始计算到零。它是通过默认初始化而不是值初始化发生的,这是一个与您的问题完全无关的技术细节。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30603512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档