1

我正在将一些 C++ 移植到 Java,并遇到以下简写..但不知道这意味着什么,甚至不知道如何进行谷歌搜索:

class mailbox {
public:
 mailbox(): sent(0),received(0),msg(0) { }

我不明白邮箱()之后的方法调用(?)表示什么。

谢谢。

4

2 回答 2

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...
}
于 2012-04-21T04:48:30.690 回答
1

假设 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 两次。

于 2012-04-21T04:56:52.937 回答