是不是在typeid里面调用了函数?

anu*_*amb 9 c++

是不是在typeid内部调用的函数?请考虑以下代码.

#include <iostream>
#include <typeinfo>
using namespace std;

int mul10(int &s)
{
    static int count = 1;
    cout << "Evaluating call " << count << endl;
    count++;
    s *= 10;
    return(s);
}

int main()
{
    int i = 5;
    cout << typeid(mul10(i)).name() << endl;
    cout << i << endl;
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

所以这里的输出是

int
5
Run Code Online (Sandbox Code Playgroud)

很明显,价值i并没有改变,而且mul10实际上并没有调用这个功能.这是怎么评估typeid参数的?

Bri*_*ian 12

typeid只有当它是多态类类型的glvalue时才会计算操作数.由于返回类型mul10,即int不是多态类类型,因此不评估操作数,这意味着mul10不调用操作数.