条件表达是(B?A :C),由于其运算结果运行时才能得到,故在编译阶段,有一个类型提升过程,
该表达式的值为A和C中较高的类型。看下面的代码:
#include <iostream>
#include <typeinfo.h>
using namespace std;
int main()
{
cout<<typeid(true?1.0:1).name()<<endl;
cout<<typeid(true?1:1.0).name()<<endl;
return 0;
}
输出:
double
double
所以有引申出一个问题: 条件表达式 在何种状况下不能修改为"if (..) {..} else {..}"?
看这段代码:
#include <iostream>
#include <typeinfo.h>
using namespace std;
int main()
{
cout<<typeid(true?1.0:1).name()<<endl;
cout<<typeid(true?1:1.0).name()<<endl;
return 0;
}
输出:
double
double
所以有引申出一个问题: 条件表达式 在何种状况下不能修改为"if (..) {..} else {..}"?
看这段代码:
#include <iostream>讨论帖:http://topic.csdn.net/u/20071021/12/d5c77a04-38cc-4f8a-b322-8e6c83354921.html
using namespace std;
void f(double)
{
cout << "double" << endl;
}
void f(int)
{
cout << "int" << endl;
}
int main()
{
f(true ? 1 : 1.0); //调用f(double)函数,因为重载解析在编译阶段进行,条件表达式产生类型提升
if(true)
{
f(1);
}
else
{
f(1.0);
}
}
输出为:
double
int