如何在C ++

时间:2015-05-22 07:41:34

标签: c++ const

我是C ++的新手,我正在尝试修改一些现有的代码。我基本上必须在C ++中修改const引用变量。有办法吗?

我想从常量字符串引用中删除子字符串。这显然不会起作用,因为id是一个恒定的参考。修改id的正确方法是什么?感谢。

const std::string& id = some_reader->Key();
int start_index = id.find("something");
id.erase(start_index, 3);

2 个答案:

答案 0 :(得分:7)

创建字符串的副本并对其进行修改,然后将其设置回来(如果需要的话)。

std::string newid = some_reader->Key();
int start_index = newid.find("something");
newid.erase(start_index, 3);

some_reader->SetKey(newid); // if required and possible

除非您知道自己在做什么,为什么要这样做以及考虑了所有其他选择,否则应避免使用其他路线......在这种情况下,您永远不需要在第一个问题中提出这个问题的地方。

答案 1 :(得分:0)

如果它是const并且您尝试更改它,则调用未定义的行为。

以下代码(使用char *代替std :: string& - 我无法展示std :: string的错误)以便在运行时使用const_cast编译并在访问冲突时断开在地址写作......

#include <iostream>

using namespace std;

const char * getStr() {
    return "abc";
}
int main() {
    char  *str = const_cast<char *>(getStr());
    str[0] = 'A';

    cout << str << endl;
    return 0;
}

所以坚持@Macke的解决方案并使用非const 副本