英特尔C ++编译器 - const字符串是可修改的

时间:2016-09-06 11:30:37

标签: c++ compiler-bug

我编码了以下内容:

#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;
}

编译,输出为“A”。即使该函数采用const引用,to_upper也会对其进行修改。 我正在使用英特尔的16.0.2编译器

在其他编译器(如g ++)上,此代码会引发编译错误。

1 个答案:

答案 0 :(得分:4)

根据a post on Intel's developer zone,它是英特尔编译器的一个错误,已在版本16.0.3(更新3)中修复。

引用 Judith Ward(英特尔)(02/05/2016)

  

根本问题是我们的编译器抑制了来自系统头的自由裁量错误(如string和stl_algo.h)。

     

我们需要对像这样的实际有用的错误(即指示潜在的运行时问题)做一个例外。这最近已经由另一个用户提交为DPD200380931,我们刚刚修复了它并确认修复了这个问题。此修复程序未使16.0更新2的代码截止,但将在16.0更新3中。