相关疑难解决方法(0)

为什么非const引用不能绑定到临时对象?

为什么不允许对一个临时对象进行非const引用,哪个函数getx()返回?显然,这是C++标准禁止的,但我对这种限制的目的感兴趣,而不是对标准的引用.

struct X
{
    X& ref() { return *this; }
};

X getx() { return X();}

void g(X & x) {}    

int f()
{
    const X& x = getx(); // OK
    X& x = getx(); // error
    X& x = getx().ref(); // OK
    g(getx()); //error
    g(getx().ref()); //OK
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 很明显,对象的生命周期不是原因,因为C++标准不禁止对对象的持续引用.
  2. 很明显,上面的示例中的临时对象不是常量,因为允许调用非常量函数.例如,ref()可以修改临时对象.
  3. 此外,ref()允许您欺骗编译器并获取此临时对象的链接,这解决了我们的问题.

此外:

他们说"为const引用分配一个临时对象可以延长这个对象的生命周期","但是对于非const引用却没有任何说法".我的其他问题.以下赋值是否延长了临时对象的生命周期?

X& x = getx().ref(); // OK
Run Code Online (Sandbox Code Playgroud)

c++ const reference temporary c++-faq

221
推荐指数
6
解决办法
9万
查看次数

在C++中将char赋值给int引用和const int引用

我注意到将a分配charconst int&编译,但将其分配给a int&会产生编译错误.

char c;
int& x = c;    // this fails to compile
const int& y = c;    // this is ok
Run Code Online (Sandbox Code Playgroud)

我知道这样做不是一个好习惯,但我很想知道它发生的原因.

我通过寻找"分配给不同类型的引用","将char分配给int引用"和"const引用与非const引用之间的区别"来搜索答案,并且遇到了许多有用的帖子(int VS const int的和,分配一个char到一个int变量时怪异的行为,转换字符在C和C++为int,参考和const引用作为函数参数之间的区别是什么?),但他们似乎并不是解决我的问题.

如果以前已经回答过,我很抱歉.

c++ casting const reference c++03

10
推荐指数
1
解决办法
352
查看次数

标签 统计

c++ ×2

const ×2

reference ×2

c++-faq ×1

c++03 ×1

casting ×1

temporary ×1