相关疑难解决方法(0)

const引用类成员是否延长了临时生命?

为什么这样:

#include <string>
#include <iostream>
using namespace std;

class Sandbox
{
public:
    Sandbox(const string& n) : member(n) {}
    const string& member;
};

int main()
{
    Sandbox sandbox(string("four"));
    cout << "The answer is: " << sandbox.member << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出输出:

答案是:

代替:

答案是:四

c++ temporary const-reference ctor-initializer

157
推荐指数
3
解决办法
4万
查看次数

为什么我不能使用统一初始化初始化初始化列表中的引用?

也就是说,为什么这样:

struct S {};

struct T
{
    T(S& s) : s{s} {}

    S& s;
};

int main()
{
    S s;
    T t{s};
}
Run Code Online (Sandbox Code Playgroud)

给我一个GCC 4.7的编译器错误:

test.cpp: In constructor 'T::T(S&)':
test.cpp:5:18: error: invalid initialization of non-const reference of type 'S&' from an rvalue of type '<brace-enclosed initializer list>'
Run Code Online (Sandbox Code Playgroud)

要修复错误,我必须更改s{s}s(s).这不会打破统一初始化的统一性吗?

编辑:我试过clang,clang接受它,所以也许这是一个GCC错误?

c++ reference initializer-list uniform-initialization c++11

33
推荐指数
3
解决办法
5010
查看次数

const引用的文字初始化

以下代码如何在C++中工作?这合乎逻辑吗?

const int &ref = 9;
const int &another_ref = ref + 6;
Run Code Online (Sandbox Code Playgroud)

为什么当非const引用不允许C++时,C++允许对const引用进行文字初始化?例如:

const int days_of_week = 7;
int &dof = days_of_week; //error: non const reference to a const object
Run Code Online (Sandbox Code Playgroud)

这可以通过以下事实来解释:非const引用可用于更改它所引用的变量的值.因此,C++不允许对const变量进行非const引用.

这可能是一个可能的解释吗?C++不允许:

int &ref = 7;
Run Code Online (Sandbox Code Playgroud)

因为这不符合逻辑,但是:

const int &ref = 7;
Run Code Online (Sandbox Code Playgroud)

几乎相当于:

const int val = 7;
Run Code Online (Sandbox Code Playgroud)

因此,const变量允许进行文字初始化.

PS:我正在研究Lippman的C++入门.

c++ variables initialization reference

18
推荐指数
2
解决办法
4848
查看次数