1

我得到以下代码:

class Book
{
public:
    void print();
    const Book &Book::get();
};
void Book::print()
{
    cout << "print()" << endl;
}
const Book &Book::get()
{
    cout << "get()" << endl;
    return *this;
}

然后我做了:

Book b;
b.get().print(); // This did not work. Why is that?
4

2 回答 2

7

它可以调用其他函数,但在这种情况下不能。

你正在返回一个const Book &from get()。然后调用print(),这是一个非常量函数。要解决此问题,请使用print()const:

void print() const;

void Book::print() const
{
    cout << "print()" << endl;
}

这个 const 确保您的对象的状态不会改变,这符合您从 . 返回的 const 对象get()。请注意,它可以更改mutable成员,因为这是他们的全部目的。

编辑:顺便说一句,您要查找的术语是method chaining.

于 2012-05-03T02:10:00.810 回答
2

Book::print() 不是 const 成员函数,因此不能使用 Book::get() 返回的 const Book 引用来调用。

于 2012-05-03T02:10:28.937 回答