2015-06-06 2 views
2

Недавно я проверил простую следующую программу в онлайн-компиляторе. Смотрите демо-версию here. Он компилирует отлично & дает ожидаемый результат, но когда я тестировал его на Dev C++ IDE, он не срабатывает во время компиляции.Почему эта программа компилируется в C++ 14, но не в компиляторе C++ 11?

Вот моя программа:

#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?

+1

[It is working] (http://coliru.stacked-crooked.com/a/4fbf7065dd424257). Возможно, что-то не хватает в компиляторе C++ 11-неполного? –

+0

@MarcoA. да, он работает в компиляторе C++ 14, но не работает в компиляторе C++ 11. Вы пробовали эту программу в компиляторе C++ 0x? – Destructor

+3

@meet Заметили ли вы, что ссылка использует '-std = C++ 11', а не' -std = C++ 14'? – hvd

ответ

4

Работает на C++ 14, а также works on C++11. Вероятно, вы используете устаревший компилятор.

Там есть неподвижная ошибка (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50025) для точного выпуска

C++0x initialization syntax doesn't work for class members of reference type

Цитируя Jonathan Wakely

The original C++11 rules required a temporary to be created there and the reference member binds to that temporary.

Источники (летальность DR 1288.): Defect Report 1288

3

Он работает на обоих c++11 и c++14 на всех этих компиляторах:

gcc 4.9.2 
gcc 5.1.0 
clang 3.5.0 

Скорее всего, вы используете старую версию gcc или другой компилятор, который еще не реализовал эту функцию C++ 11.

C++ 11 был реализован на этапах компиляторами. Каждая версия добавила/улучшила/исправила некоторые возможности C++ 11.

Смежные вопросы