2017-02-15 10 views
-1

constであるものを返すことの背後にある適切な考え方を把握していないと思います。関数から返されるconstを変更する

const値を返す関数を持っている場合、返された後に値を変更できないということはありませんか?

なぜコンパイラは私のconstを非const変数にキャストすることができますか?

constポインタでのみ動作しますか?

const int foo(int index) { 
    return ++index; 
} 

int main(){ 
    int i = foo(1); // why can I do this? 
    ++i; 

    return 0; 
} 
+0

'const int'はかなり簡単にコピーすることができます。これは' i'に代入すると起こります。ポインタとターゲットの両方が 'const'である' const X * const'を持たない限り、あなたが* at *を指しているのは 'const'です。詳細については、[このような例](http://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const)を参照してください。 'const int'を返すことは、コピーするのがとても安いので、どのような場合でも無意味です。 – tadman

+2

http://stackoverflow.com/questions/6299967/what-are-the-use-cases-for-having-a-function-return-by-const-value-for-non-builtおよびhttp://を参照してください。より多くの情報のためにstackoverflow.com/questions/8716330/purpose-of-returning-by-const-value – wkl

+0

値でconstを返すことは役に立たないですか? @ tadman – Dannz

答えて

4

あなたはこの同等のものをやっている:つまり

const int a = 42; // a cannot be modified 
int b = a;  // b is a copy of a... 
++b;    // and it can be modified 

、あなたがconstオブジェクトのコピーを作成し、言ったコピーを変更しています。


const値を返すことは限られていることに注意してください、EHM、値。組み込み型の場合は重要ではありません。ユーザー定義型の場合、移動セマンティクスを防ぎながら "一時的な"オブジェクトの変更を防ぐことができます。 C++ 11以降、const値を返さないことが推奨されています。

関連する問題