4

In the simple following example, I expected the output would be "2222". But the actual output was "2122" for both VC++ 11.0 and g++ 4.6.1.

#include <iostream>

template <class T>
void func(T x)
{
    x = 2;
    std::cout << x;
}

int main()
{
    int x = 1;

    func((int &)x);
    std::cout << x;

    func<int &>(x);
    std::cout << x;

    return 0;
}

I disassembled and found that the first func call, func((int &)x), uses func<int> instead of func<int &>. Why and how is this happened?

4

1 に答える 1

4

テンプレート型の引数推定はそのように機能します。int&変数xはすでに左辺値であるため、へのキャストは効果がありません。引数が左辺値で、パラメーターが参照でない場合のテンプレートの型推定では、型が参照でないと推定されます。

于 2013-01-16T04:08:31.430 に答える