【发布时间】:2016-07-19 09:20:41
【问题描述】:
请允许我先发布我的代码:
void Fun(short &s){}
void FunCon(const short &s){}
int main()
{
int iTest = 20;//note: iTest is int but parameter of Fun is "short &"
Fun(iTest);//error, I know there is a temp variable(typecast)
FunCon(iTest);//ok
return 0;
}
我知道Fun(iTest);会生成一个新的临时变量(类型转换),但我想知道临时变量是否是一个常量?
如果否:为什么我不能将临时变量传递给short &
如果是:我有另一个这样的代码:
class MyObject{
public :
void F(){}
};
MyObject MOCreator(){
return MyObject();
}
int main()
{
MOCreator().F();//OK
return 0;
}
如果MOCreator()返回的临时变量是常量,为什么临时变量可以调用非常量成员函数? p>
我的问题是:
1) C++中临时变量和常量有什么区别?
2)Thinking in C++中有一句话(第507页)。句子对吗?为什么?:
临时对象自动const
有人问我一个简单的问题,我在解决问题的过程中遇到了更多问题。我知道它们可能是一个非常常见的问题,我在网上搜索了很长时间。我也得到了很多不同的答案。但我现在对此更加困惑。
提前致谢。
【问题讨论】:
标签: c++ casting constants pass-by-reference pass-by-const-reference