相关疑难解决方法(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万
查看次数

用数字初始化常量引用

下面这行是什么意思?为什么允许这样做,因为 0 是右值而不是变量名?const这句话的意义何在?

const int &x = 0;
Run Code Online (Sandbox Code Playgroud)

c++ reference constants rvalue-reference

77
推荐指数
1
解决办法
986
查看次数

将 const 指针引用绑定到非常量指针

int val2 = 38;
int *ptr = &val2;
const int *&ptrRef = ptr; // ERROR

int i = 92;
int &ref_i = i;
const int &ref_i2 = ref_i;  // OK
Run Code Online (Sandbox Code Playgroud)

为什么我不能有一个引用非常量指针的常量引用?我认为如果你访问 constptrRef标识符,它将被视为val2const。当您访问 时ptr,它将被视为val2非常量。这适用于代码的底部部分,所以我不明白为什么它不适用于指针。

c++ pointers reference

7
推荐指数
1
解决办法
412
查看次数

为什么两个const / nonconst左值引用都绑定到右值引用?

允许使用以下非常简单的代码:

class s
{
public:
};

const s& tt = std::move(s()); // Also valid without 'const'
Run Code Online (Sandbox Code Playgroud)

但是现在我想知道为什么允许它。

首先我们使用 std::move一个右值(临时值)并将其标记为右值引用,但是为什么左值引用可以绑定到右值引用?

是否因为右值引用也是右值?

导致左值引用绑定到右值引用的基本原理(或标准引号)是什么?可以做到的

编辑:msvc2015允许非常量左值引用绑定到右值引用,问题仍然是常量左值引用绑定到右值引用。抱歉,我应该指定我使用的编译器。

c++ rvalue rvalue-reference

3
推荐指数
1
解决办法
626
查看次数

为什么将右值转换为左值引用不会引发警告?

有谁知道,为什么下面的代码没有发出警告?

struct Foo
{
    int a = 1;
};

struct Bar
{
    Foo getString()
    {
        return Foo();
    }
};

int main()
{
    Bar a;
    const Foo& b = a.getString();   <--- Foo getString() becomes Foo&?
}
Run Code Online (Sandbox Code Playgroud)

https://gcc.godbolt.org/z/GYzWa7

c++

0
推荐指数
1
解决办法
39
查看次数