2

我最近在一个在线编译器上测试了下面这个简单的程序。在此处查看现场演示。它编译得很好并给出了预期的输出,但是当我在 Dev C++ IDE 上测试它时,它在编译过程中失败了。

这是我的程序:

#include <iostream>
class Test
{
    int s=9;
    public:
    int get_s()
    {
        return s;
    }
};
int main()
{
    Test s;
    Test& t{s};      // error in C++11 but not in C++14 why???
    std::cout<<t.get_s();
} 

它给了我以下错误:

[Error] invalid initialization of non-const reference of type 'Test&' from an rvalue of type '<brace-enclosed initializer list>'

我还在代码块 13.12 IDE 上尝试过它,它给了我与 Dev C++ 相同的错误。

这是一个新的 C++14 特性吗?为什么它在 C++11 编译器中不起作用?

4

2 回答 2

4

它适用于 C++14,也适用于 C++11。您很可能使用过时的编译器。

您的确切问题(cfr. DR 1288)有一个固定的错误(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50025

C++0x 初始化语法不适用于引用类型的类成员

引用Jonathan Wakely

原始的 C++11 规则需要在此处创建一个临时对象,并且引用成员绑定到该临时对象。

来源:缺陷报告 1288

于 2015-06-06T08:51:27.447 回答
3

它适用于所有这些编译器c++11c++14

gcc 4.9.2
gcc 5.1.0
clang 3.5.0

您很可能正在使用旧版本的 gcc 或其他尚未实现此 c++11 功能的编译器。

c++11 是由编译器在阶段上实现的。每个版本都添加/改进/修复了一些 c++11 功能。

于 2015-06-06T08:51:30.910 回答