0

次のコードでコンパイラ エラーが発生しないのはなぜですか?

template<typename T>
const T testFunc()
{
    return T();
}

float* ptr = testFunc<float*>(); // ptr is not const - should be a compiler error!

この例では、testFunc() は定数の float* を返す必要があるため、非 const の float* に代入しようとするとコンパイラ エラーが発生するはずではありませんか?

4

1 に答える 1

4

あなたの期待は間違っています。返されるポインターは、ポイントされたオブジェクトではなく const になります。特殊化は次と同等です。

float * const testFunc<float*>();

それよりも:

float const * testFunc<float*>();

あなたの例では、呼び出し側のコードはconst ポインターから非 const ポインターにコピーしていますが、これは問題ありません。

于 2012-08-29T02:19:19.220 に答える