関数はtypeidの中で呼び出されていませんか?以下のコードを考えてみましょう。関数が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);
}
ので、ここでの出力は、そうはっきりi
の値が変更されていないとも機能mul10
が実際に呼び出されなかった
int
5
です。これは、typeid引数がどのように評価されるのでしょうか?
関数を呼び出す必要はありません。結果の型は、コンパイラによって既に認識されています。 –
http://en.cppreference.com/w/cpp/language/typeid –
「必須ではありません」以上です。コンパイラ*はこの場合関数を呼び出すことはできません。例えば。このプログラムは正しいです: 'int x(){return 1/0; } int main(){typeid(x()); } ' –