Tôi quyết định xem liệu việc gán tham chiếu cho một thành viên sẽ làm cho thành viên trở thành tham chiếu hay không. Tôi đã viết đoạn mã sau để kiểm tra nó. Có một lớp đơn giản Wrapper
với một biến số thành viên là std::string
. Tôi lấy một số const string&
trong hàm tạo và gán nó cho biến thành viên công khai. Sau đó trong phương pháp main()
tôi sửa đổi biến thành viên nhưng string
tôi chuyển cho hàm tạo vẫn không thay đổi, làm thế nào đến? Tôi nghĩ rằng trong Java biến sẽ thay đổi, tại sao không trong đoạn mã này? Các tham chiếu hoạt động chính xác như thế nào trong trường hợp này?Đi qua tham chiếu đến một hàm tạo
#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ác loại trong C++ là những gì bạn quyết định và chúng không trở thành một thứ gì đó kỳ diệu. Bạn nói 'string', và bạn nhận được một' chuỗi'. Nếu bạn muốn tham khảo, bạn đã nói 'string &'. –
Bạn lạm dụng những người có câu hỏi quá đơn giản :) – Mikhail
Trong Java biến sẽ không thay đổi vì mã thậm chí sẽ không biên dịch; các chuỗi trong Java không được phép sửa đổi. –