3

これは私が達成しようとしていることです:

struct test{};

const test returnconst(){
    return test();
}

test returnnonconst(){
    return test();
}

int main(){
          test t1=returnnonconst();
    const test t2=returnnonconst();
          test t3=returnconst();  //I want this to be a compile error
    const test t4=returnconst();
}

コンパイラは、4 つの return* 呼び出しをすべて受け入れます。3 番目の呼び出しでオブジェクトのコピーが構築されることは理解していますが、代わりに呼び出し元にreturnconst値を として格納するよう強制したいと考えていますconst。これに対する回避策はありますか?

4

3 に答える 3

3

あなたは値で戻っています。のコピーを作成していますconst。したがって、基本的には、次のコピーを作成したくないと言っていますconst

struct test { private: test(const test& other); };

前のコードは機能しません。他にもたくさんのエラーが発生します。それは不可能です:)

オブジェクトのコピーを作成することを制限しているためではありませんconstが、新しく作成されたオブジェクトも であることを強制する方法はありませんconst

于 2012-05-09T19:07:19.503 に答える
0

それを行う方法はありません。なぜやりたいのですか?何を達成しようとしていますか?

于 2012-05-09T19:07:43.417 に答える
0

ここでの問題は、const オブジェクトを返し、コピー割り当てまたはコンストラクターを呼び出して、新しい非 const オブジェクトの値によるコピーを作成することです。値のコピーの作成を無効にして、ユーザーに参照代入を強制することもできますが、それは煩わしいかもしれません。

于 2012-05-09T19:07:45.210 に答える