最近我看到了这样一个例子:
#include <iostream>
class Foo {
public:
int bar;
Foo(int num): bar(num) {};
};
int main(void) {
std::cout << Foo(42).bar << std::endl;
return 0;
}
这个奇怪的bar(num)是什么意思?它似乎初始化了成员变量,但我以前从未见过这种语法。它看起来像一个函数/构造函数调用,但int?这对我来说毫无意义。也许有人能启发我。顺便问一下,还有没有其他像这样深奥的语言特性,你在普通的c++书中找不到?
这是一个初始化列表。它将在运行构造函数体之前初始化成员。
考虑
class Foo {
public:
string str;
Foo(string &p)
{
str = p;
};
};
vs
class Foo {
public:
string str;
Foo(string &p): str(p) {};
};
在第一个例子中,str将由它的无参数构造函数初始化
string();
在Foo构造函数体之前。在foo构造函数内部,
string& operator=( const string& s );
将在'str'上调用,就像你执行str = p;
而在第二个例子中,str将直接由
调用它的构造函数
string( const string& s );
用'p'作为参数。