为啥不能把一个右值传递给一个需要引用作为参数的函数
为什么不能把一个右值传递给一个需要引用作为参数的函数?
以下的代码在GCC里面编译会报错:
错误在f(X())这一行。
但是vc里面却没有问题。
而且,如果我给f函数的参数声明加上const,GCC也能编译过了。奇怪!
我的问题是:这个代码到底算不算一个错误,为什么GCC认为是错误,vc不认为是?
C++ 11的标准有没有规定可不可以这样用呢?
谢谢
------解决思路----------------------
编译器的问题吧
感觉跟默认构造函数有关系
------解决思路----------------------
我猜测是因为
f(X())这里生成了一个临时对象,因为你传的是引用,但是在f()内对这个临时对象的修改是无意义的,而GCC的要求更加严格一点,所以必须强制你加上const
一般而言,gcc对标准的支持会比VC更好更及时。
以下的代码在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的标准有没有规定可不可以这样用呢?
谢谢
------解决思路----------------------
编译器的问题吧
感觉跟默认构造函数有关系
------解决思路----------------------
我猜测是因为
f(X())这里生成了一个临时对象,因为你传的是引用,但是在f()内对这个临时对象的修改是无意义的,而GCC的要求更加严格一点,所以必须强制你加上const
一般而言,gcc对标准的支持会比VC更好更及时。