1

次のような「レガシー」コード(変更はできませんが、追加する必要があります)があります。

template<typename T> T Foo(T& target)
{
    //Assign to 'target', but never read from it before that.
    //Also, 'target' is going to be a POD-type.

    target = T();

    return target;
}

int main()
{
    float value = Foo(value);
}

これは安全ではないように感じます (つまり、target使用する前に が決して割り当てられないことを確認します)。この種のインターフェイスには他に潜在的に致命的な問題はありますか?

4

1 に答える 1

1

さて..コードを実行すると:

T value;

値は、それに対して呼び出されたコンストラクターを取得します。テンプレートは、正直なところ、コンストラクターが 2 回呼び出されているように見えます。

また、T が単純な古いデータである場合、発生する可能性のある致命的な問題はありません...

何が起こると心配していますか?

于 2009-04-06T01:57:29.440 に答える