2

このコードは奇妙に見えます:

const double square(double x) {

    return x*x;

}

常識的に言えばconst、この文脈では次のいずれかを意味します。

  • 関数はconst double

また

  • 渡された を変更しないことを約束doubleします。しかし、それは値によって渡されました! 理解できない

また

  • const member functions変更しないという約束は知っています*thisが、これはメンバー関数でさえありません。

編集

const double結果を非変数に保存して編集できる場合、を返すポイントは何constですか??

double var = square(4.5); // no compile error

var = 0.3;
4

5 に答える 5

4

それは変だね。あなたが言うように:

関数はconst double

ユーザー定義型の場合、これにより戻り値を変更できなくなります。

square(2) += 5; // Error

ただし、コメントに記載されているように、これはdoubleとにかく組み込み型には許可されていません。ユーザー定義型の場合でも、おそらくそのようなコードを書きたくないでしょうが、それを防ぐ意味もありません。

より複雑な型の場合、値を返すconstことは実際には有害なconst場合があります。オブジェクトを移動できないため、移動セマンティクスが阻害されます。これにより、パフォーマンスが低下する可能性があります。

于 2013-08-09T08:36:39.617 に答える
0

それは「const関数」ではありません。という値を返す関数ですconst。「定数関数」はメンバー関数にのみ適用され、パラメーター リストの後に右側にconst移動します。

単純な値型に対するこれの有用性は疑わしいです。ただし、参照constまたはconstポインターなどを返す場合は、メリットがある可能性があります。

単純な型の a を値で返す唯一のことは、C++11 でconst非 r 値参照によってキャプチャできないようにすることです。constそれ以外の場合は、値をコピーして途中で終了します。

于 2013-08-09T08:34:39.353 に答える
0

あなたが与える例では、PODタイプではほとんど意味がありませんが、より複雑なタイプでは意味があります:-

const SomeClass &SomeFunction ();

const オブジェクトへの参照を返します。

于 2013-08-09T08:34:43.187 に答える
0

戻り値の前に const を持つ const 関数は、通常、関数がポインター (またはおそらく参照) を返す場合に使用され、const ポインターのみを返すことを示します。これは double を返します。つまり、const である double のみを返します。

于 2013-08-09T08:36:20.080 に答える