为什么不能把一个右值传递给一个需要引用作为参数的函数?

wqerww23 wqerww23 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
以下的代码在GCC里面编译会报错:

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,拥有完全相同的值,但拥有完全不

weixin_38689477

C++函数参数的引用方式

总结来说,值传递将实参的值复制给函数的形参,对形参的修改不会影响实参本身;引用传递将实参的引用传递给函数的形参,对形参的修改会同时修改实参。非常量引用参数允许修改传递给函数的实参,而常量引用参数只能读取实参的值,不能进行修改。引用传递是指将实参的引用传递给形参,在函数中对形参的修改会同时修改实参。值传递是指将实参的值复制给形参,在函数中对形参的修改不会影响实参本身。符号定义的,它允许函数修改传递给它的实参,并且对应的实参也会被修改。符号定义的,它确保函数无法修改传递给它的实参,只能读取。

百锦再@新空间创想科技

浅谈C++左值引用和右值引用

下面小编就为大家带来一篇浅谈C++左值引用和右值引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38686041

详解java的值传递、地址传递、引用传递

主要介绍了详解java的值传递、地址传递、引用传递的相关资料,需要的朋友可以参考下

weixin_38637805

java值传递与引用传递

不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址

jwcandy
评论 2
收藏 已收藏
分享
返回顶部
wqerww23
C++ 语言 65,214 成员 250,514 内容