我有一些代码:

const string MY_STRINGS[3] = { "A", "B", "C" };

当我尝试这样做时:
int main() {
  MY_STRINGS[1] = MY_STRINGS[2];
}

我收到以下错误:



当然。说得通。我无法分配给const string

但是当我执行以下操作时:
int main() {
  const string SOME_STRINGS[3] = MY_STRINGS;
  MY_STRINGS[1] = MY_STRINGS[2];
}

编译并工作。发生了什么变化,为什么现在可以编译?

最佳答案

我相信GCC复制了阵列。因此,确保const数组是不变的,并且可变数组是可变的。

#include <string>
#include <iostream>

using namespace std;

int main() {
    string varStrs[] = {"unchanged", "changed"};
    const string constStrs[2] = varStrs;

    varStrs[0] = varStrs[1];
    //constStrs[0] = constStrs[1]; // <-- will not compile

    cout << "const str: " << constStrs[0] << endl;
    cout << "var str: " << varStrs[0] << endl;

    return 0;
}

我在GCC版本4.1.2上进行了测试

关于c++ - const字符串丢弃限定词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9369968/

10-08 20:34