我正在将一些 C++ 移植到 Java,并遇到以下简写..但不知道这意味着什么,甚至不知道如何进行谷歌搜索:
class mailbox {
public:
mailbox(): sent(0),received(0),msg(0) { }
我不明白邮箱()之后的方法调用(?)表示什么。
谢谢。
这是成员初始化语法。它将数据成员初始化为在构造函数主体开始之前指定的值。
这是在 C++11 之前初始化非静态常量数据成员的唯一方法,并且比在构造函数的主体中初始化更快。
就像是
mailbox() {
sent = 0;
received = 0;
msg = 0;
}
除了更快,它也可以在 const 成员上执行。事实上,虽然它不提供对数据成员执行检查的能力,但您仍然可以使用它:
mailbox (Foo sent, Bar received, Foobar msg) : sent (0), received (0), msg (0) { //default values
if (!setSent (sent))
cout << "Error setting sent; sent is 0 instead."; //since we initialized it to 0 before
//likewise for other members...
}
假设 sent、received 和 msg 都是 int,则等价于:
mailbox() {
sent = 0;
received = 0;
msg = 0;
}
存在这种语法是因为,与所有对象都是指针的 Java 不同,在 C++ 中,您可以拥有其类型没有默认构造函数的成员变量。举个例子:
class Foo {
public:
Foo(int x);
};
class Bar {
public:
Bar(int x) { // ERROR, Foo does not have a default constructor
foo = Foo(x);
}
Bar() : Foo(0) {} // OK, using Foo(int) instead of Foo()
private:
Foo foo;
};
请注意,在示例中,即使 Foo 具有默认构造函数, Bar(int) 也会构造 Foo 两次。