名前のない一時オブジェクトをconst refパラメータで定義された関数に渡しています。クラスのコピーctorがプライベートで、コンパイルエラーが発生します。このような状況でコピーコンストラクタが呼び出される理由はわかりません。const参照で一時的に渡すときにコピーコンストラクタが呼び出されるのはなぜですか?
class A {
public:
A(int i) {}
private:
A(const A&) {}
};
void f(const A& a)
{
}
int main()
{
f(A(1)); // <-- error here: 'A::A(const A&)' is private
}
私はメインを変更すると、予想通り:
A a(1);
f(a);
それが動作します。
EDIT:(1)コンストラクタA(I int型)を呼び出した後、(定数A &)は&をCONST(Fを無効にするコールで呼び出されているため、コンパイラは4.1.2
どのコンパイラを使用していますか? – sharptooth
VC++ 9は最初の変種をコンパイルするのに満足しています。 – sharptooth
@sharptooth:gcc、更新します – davka