【发布时间】:2011-07-03 07:45:27
【问题描述】:
我正在使用 C++ 中的引用,并注意到一些我无法解释的奇怪行为。我的理解是,如果我有一个非常量变量和对同一变量的 const 引用,然后修改非常量变量,则引用应该反映该修改。
例子:
void foo() {
int x = 5;
const int& y = x;
x = 10;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
为我产生以下输出:
x = 10
y = 10
但是,如果我将类型更改为 std::string,则 const 引用似乎不会反映修改后的变量:
void foo() {
std::string x = "abc";
const std::string& y = x;
x = "xyz";
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
为我生成以下内容:
x = xyz
y = abc
这是使用 std::string 尝试此操作时的正常预期行为吗? (我使用的是 GCC 4.6.0;我目前没有任何其他可用的编译器,所以我不知道这是否只发生在这个特定版本上。)
【问题讨论】:
-
用 g++-mp-4.6 (GCC) 4.6.0 20100814 编译的代码会打印两次
xyz,我尝试过不同的优化级别。您是否复制确切的代码? -
按预期工作。 (“xyz\nxyz\n”)。这让我相信要么存在 BCAK 错误,要么存在复制和粘贴错误。请检查您的代码并发布代码的完整可编译版本(使用复制和粘贴)。
-
感谢大家提供的信息。通过复制粘贴到另一个文件,我确实让它按照我期望的方式工作。当我以二进制模式查看原始文件时,在我的声明中的“&”之前隐藏了很多无关的字节,我只能猜测它们以某种方式造成了麻烦。我不知道它是怎么编译成这样的。但是感谢大家帮助我解决这个问题。你们都很棒!