1

重複の可能性:
コピー不可能なオブジェクトと値の初期化: g++ と msvc
自動オブジェクトの値を初期化しますか?

次のステートメントを検討してください。

自動オブジェクトを値で初期化することは実際には不可能です。

この声明は本当ですか?これを行うことに問題はありません:

int main()
{
    int i = int();
}
4

1 に答える 1

3

この用語value-initializationは、8.5 [dcl.init]段落16、4番目の箇条書きで定義されています。

イニシャライザが()の場合、オブジェクトは値で初期化されます。

つまり、自動変数の値の初期化は次のようになります。

int i();

iただし、これはを返すという関数の宣言ですint。したがって、自動の値を初期化することはできません。この例では、一時変数は値で初期化され、自動変数はコピーで初期化されています。これには、アクセス可能なコピーコンストラクターがないテストクラスを使用して、コピーコンストラクターにアクセスできる必要があることを確認できます。

class noncopyable {
    noncopyable(noncopyable const&);
public:
    noncopyable();
};

int main() {
    noncopyable i = noncopyable(); // ERROR: not copyable
}

SINCE C ++ 11仕事int i{};をします(これも参照してください)。

于 2012-02-19T04:54:31.753 に答える