【发布时间】:2012-03-19 09:42:29
【问题描述】:
我决定看看为成员分配引用是否会使成员成为引用。我写了下面的sn-p来测试它。有一个简单的类Wrapper,其成员变量为std::string。我在构造函数中取一个const string& 并将其分配给公共成员变量。后来在main()方法中我修改了成员变量,但是我传递给构造函数的string没有改变,怎么会?我认为在Java中变量会改变,为什么不在这段代码sn-p中?在这种情况下,引用究竟是如何工作的?
#include <iostream>
#include <string>
using namespace std;
class Wrapper
{
public:
string str;
Wrapper(const string& newStr)
{
str = newStr;
}
};
int main (int argc, char * const argv[])
{
string str = "hello";
cout << str << endl;
Wrapper wrapper(str);
wrapper.str[0] = 'j'; // should change 'hello' to 'jello'
cout << str << endl;
}
【问题讨论】:
-
C++ 中的类型是你规定的,它们不会神奇地变成别的东西。你说
string,你得到一个string。如果你想要一个参考,你会说string &。 -
你用太简单的问题虐待别人:)
-
在 Java 中,变量不会改变,因为代码甚至还没有编译; Java中的字符串不允许修改。
标签: c++ constructor pass-by-reference