C++の匿名オブジェクトは左の値である必要があります
1878 ワード
以前、匿名のオブジェクトは右の値だという誤解があった.匿名オブジェクトが参照タイプのパラメータに伝達できることに気づくまで、この認識は間違っていた.参照タイプのパラメータに渡すには左の値しかないからです.テストでも、匿名のオブジェクトを等号の左側に置いて値を付けることができることがわかり、私の認識をさらに固めました.
次のコードは正しいです.
ネットで匿名オブジェクトを検索したところ、C++では厳密に定義されていないようで、匿名オブジェクトはJavaの概念であるべきだということに気づいた.したがって、ここで指す匿名オブジェクト、すなわち、識別子なしでクラスのインスタンスオブジェクトを説明します.例えば、このようなコードで直接生成されるオブジェクトであるTest(1)--は匿名のオブジェクトである.または、クラスタイプ(非参照)を返す関数で、匿名のオブジェクトを返します.
左の値の本質はメモリに存在し、匿名オブジェクトは構造関数を実行し、メモリにも存在するが、そのコードが実行されると解放される.ただし、メモリが占有されている限り、左の値です.
次のコードは正しいです.
class Test
{
public:
Test(int a) : m_a(a)
{
cout << "constructor called" << endl;
}
Test& operator=(int a)
{
m_a = a;
return *this;
}
private:
int m_a;
};
int main()
{
Test(1) = 10;
return 0;
}
ネットで匿名オブジェクトを検索したところ、C++では厳密に定義されていないようで、匿名オブジェクトはJavaの概念であるべきだということに気づいた.したがって、ここで指す匿名オブジェクト、すなわち、識別子なしでクラスのインスタンスオブジェクトを説明します.例えば、このようなコードで直接生成されるオブジェクトであるTest(1)--は匿名のオブジェクトである.または、クラスタイプ(非参照)を返す関数で、匿名のオブジェクトを返します.
左の値の本質はメモリに存在し、匿名オブジェクトは構造関数を実行し、メモリにも存在するが、そのコードが実行されると解放される.ただし、メモリが占有されている限り、左の値です.