一再强调原始类型没有构造函数。例如,当我调用Foo()
时,_bar
不会被初始化为0:
class Foo{
int _bar;
};
显然 int()
不是一个构造函数。但它的名字是什么?
在这个例子中,我会说i
是:(被构造?初始化?fooed?)
for(int i{}; i < 13; ++i)
Loki Astari提到了这里该技术有一定的名称。
根据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
T()
创建一个值初始化的prvalue。 - David Rodríguez - dribeasFoo
被零初始化,这反过来意味着在Foo()
中_bar
需要获得值0。 - David Rodríguez - dribeasT()
的意思是“值初始化”,而不是理解“值初始化”的含义(这是另一个问题的重点:https://dev59.com/aXI-5IYBdhLWcg3w6tFR)。 - David Rodríguez - dribeas