为什么不能把一个右值传递给一个需要引用作为参数的函数?
class X
{
public:
X(){}
};
void f(X& x)
{
}
int main(void)
{
f(X());
return 0;
}
错误在f(X())这一行。
但是vc里面却没有问题。
而且,如果我给f函数的参数声明加上const,GCC也能编译过了。奇怪!
我的问题是:这个代码到底算不算一个错误,为什么GCC认为是错误,vc不认为是?
C++ 11的标准有没有规定可不可以这样用呢?
谢谢
相关推荐
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备。那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num; } num=10; alert(add(num)); aelrt(num); //输出20,10 对于这里的输出20,10,按照JS的官方解释就是在基本类型参数传递的时候,做了一件复制栈帧的拷贝动作,这样外部声明的变量num和函数参数的num,拥有完全相同的值,但拥有完全不
C++函数参数的引用方式
总结来说,值传递将实参的值复制给函数的形参,对形参的修改不会影响实参本身;引用传递将实参的引用传递给函数的形参,对形参的修改会同时修改实参。非常量引用参数允许修改传递给函数的实参,而常量引用参数只能读取实参的值,不能进行修改。引用传递是指将实参的引用传递给形参,在函数中对形参的修改会同时修改实参。值传递是指将实参的值复制给形参,在函数中对形参的修改不会影响实参本身。符号定义的,它允许函数修改传递给它的实参,并且对应的实参也会被修改。符号定义的,它确保函数无法修改传递给它的实参,只能读取。
浅谈C++左值引用和右值引用
下面小编就为大家带来一篇浅谈C++左值引用和右值引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
详解java的值传递、地址传递、引用传递
主要介绍了详解java的值传递、地址传递、引用传递的相关资料,需要的朋友可以参考下
java值传递与引用传递
不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址


