2016-09-06 4 views
3

Я кодируются следующим образом:Intel C++ Compiler - Const строка изменяемые

#include <string> 
#include <iostream> 
#include <boost/algorithm/string.hpp> 

using namespace std; 

string encode(const string& word) { 
    boost::algorithm::to_upper(word); 
    return word; 
} 

int main() { 
    string word = "a"; 
    string word1 = encode(word); 
    cout << word << endl; 
} 

компилируется, а выход "А". Даже если функция принимает const ссылку, to_upper изменяет ее. Я использую компилятор Intel 16.0.2

В других компиляторах (например, g ++) этот код генерирует ошибку компиляции.

+0

Вы уверены, что компилируется? Какая форсированная версия и компилятор? – juanchopanza

+1

В gcc 5.4 это дает ошибку для вызова 'to_upper'. –

+1

Я использую boost 1.61.0 и компилятор Intel 16.0.2, и он точно компилируется. Теперь я тестировал его также с gcc. С gcc он терпит неудачу во время компиляции. Итак, значит ли это, что есть проблема с компилятором Intel? – mftrmbn

ответ

4

Согласно a post on Intel's developer zone, это ошибка с компилятором Intel, исправленная в версии 16.0.3 (обновление 3).

Цитирование Джудит Уорд (Intel) (02/05/2016):

Основная проблема заключается в том, что наш компилятор подавлено дискреционные ошибки, которые приходят от системных заголовков (например, строки и stl_algo.h).

Нам нужно сделать исключение для действительно полезных ошибок (т. Е. Указывать на потенциальную проблему времени выполнения), подобных этому. Это было недавно отправлено другим пользователем как DPD200380931, и мы только что исправили его и подтвердили, что исправили эту проблему. Это исправление не привело к отключению кода для 16.0 обновления 2, но будет в обновлении 16.0. 3.

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