我正在将一些C ++移植到Java,并遇到了以下简写..但不知道这意味着什么,甚至不知道如何使用Google搜索:
class mailbox {
public:
mailbox(): sent(0),received(0),msg(0) { }
我不明白该方法在mailbox()表示后调用(?)的内容。
感谢。
答案 0 :(得分:2)
这是成员初始化语法。它将数据成员初始化为构造函数体开始之前指定的值。
这是在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...
}
答案 1 :(得分:1)
假设发送,接收和消息是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两次。