【发布时间】:2015-02-11 03:47:01
【问题描述】:
原始类型没有构造函数已经被反复强调了。例如,当我调用Foo() 时,此_bar 未初始化为0:
class Foo{
int _bar;
};
显然int() 不是构造函数。但是是它的名字是什么?
在本例中,我会说i 是:(已构造?已初始化?已装错?)
for(int i{}; i < 13; ++i)
Loki Astari 提到 here 该技术有某种名称。
编辑回复Mike Seymour:
#include <iostream>
using namespace std;
class Foo{
int _bar;
public:
void printBar(){ cout << _bar << endl; }
};
int main()
{
Foo foo;
foo.printBar();
Foo().printBar();
return 0;
}
在 Visual Studio 2013 上运行此代码会产生:
3382592
3382592
有趣的是 gcc 4.8.1 产量:
134514651
0
【问题讨论】:
-
作为表达式,
int()和Foo()在语法上是“功能表示法”中的“显式类型转换”,就像int(5),但规则不同。但我猜只有少数人使用该名称来识别该功能。 -
添加到 dyp,以及我标记为重复的原因(不知道它会立即关闭!),
T()创建了一个值初始化的 prvalue -
关于编译器的区别,VS是错误的。 值初始化的规则要求
Foo是零初始化,这反过来意味着_bar需要在Foo()中获取值0 -
@JonathanMee:已知 VS 在不同形式的 值初始化 方面存在问题。我有一组测试用例在那里失败了一段时间,在我的公司中,我们在少数情况下围绕编译器工作。
-
重新打开了这个问题,并不是真正的重复,因为这个问题的问题是发现
T()意味着 value-initialization,而不是理解什么 value-初始化 意味着(这是另一个问题的重点:stackoverflow.com/questions/1613341/…)
标签: c++ initialization primitive nomenclature construction