重複の可能性:
const オブジェクトを返す必要がありますか?
(その質問の元のタイトルは、int foo() or const int foo()?で、なぜ見逃したのかを説明しています。)
効果的な C++、項目 3: 可能な限り const を使用します。特に、 const オブジェクトを返すことは、 のような意図しない代入を避けるために促進されif (a*b = c) {
ます。私はそれが少し妄想的だと思いますが、それでも私はこのアドバイスに従っています.
const オブジェクトを返すと、C++11 でパフォーマンスが低下する可能性があるように思えます。
#include <iostream>
using namespace std;
class C {
public:
C() : v(nullptr) { }
C& operator=(const C& other) {
cout << "copy" << endl;
// copy contents of v[]
return *this;
}
C& operator=(C&& other) {
cout << "move" << endl;
v = other.v, other.v = nullptr;
return *this;
}
private:
int* v;
};
const C const_is_returned() { return C(); }
C nonconst_is_returned() { return C(); }
int main(int argc, char* argv[]) {
C c;
c = const_is_returned();
c = nonconst_is_returned();
return 0;
}
これは以下を出力します:
copy
move
移動割り当てを正しく実装していますか? それとも、C++11 で const オブジェクトを返すべきではありませんか?