回答ありがとうございます :-)
ここにあなたの良いアイデアを集めます ;-)
答え
値引きは行っておりません const
。たとえば、return by valueの非 const メンバー関数を呼び出すことができます。
class C {
public:
int x;
void set (int n) { x = n; } // non-const function
};
C bar() { return C(); }
int main ()
{
bar.set(5); // OK
}
ただし、C++ では一時オブジェクトへの非 const 参照は許可されません。ただし、C++11 では、一時オブジェクトへの
非 const右辺値参照が許可されます。;-)
説明
class C {};
void foo (C& c) {}
C bar() { return C(); }
//bar() returns a temporary object
//temporary objects cannot be non-const referenced
int main()
{
//foo() wants a mutable reference (i.e. non-const)
foo( bar() ); // => compilation error
}
3 つの修正
変更foo
宣言
void foo (const C& c) {}
別のオブジェクトを使用する
int main()
{
C c;
foo( c = bar() );
}
C++11右辺値参照を使用する
void foo(C && c) {}
さらに
一時オブジェクトが const であることを確認するには、上記のソース コードは同じ理由で失敗します。
class C {};
void foo(C& c) {}
int main()
{
foo( C() );
}