tôi đã được học đi ngang qua tham khảo, và đây là bài kiểm tra tôi đã làm:Vượt qua tham chiếu, tham chiếu liên tục, tham chiếu rvalue, hoặc tham chiếu rvalue không đổi?
#include <iostream>
using namespace std;
int i = 0;
//If this is uncommented, compiler gives ambiguous definition error.
//void paramCheck (string s) {
// cout << ++i << ". Param is var.\n";
//}
void paramCheck (const string& s) {
cout << ++i << ". Param is const ref.\n";
}
void paramCheck (string& s) {
cout << ++i << ". Param is non-const ref.\n";
}
void paramCheck (const string&& s) {
cout << ++i << ". Param is const rvalue-reference.\n";
}
void paramCheck (string&& s) {
cout << ++i << ". Param is non-const rvalue-reference.\n";
}
int main(int argc, char **argv) {
//Function call test
paramCheck("");
paramCheck(string{""});
string s3{""};
paramCheck(s3);
const string s4{""};
paramCheck(s4);
//Illegal
//string& s{""};
//paramCheck(s);
const string& s5{s3};
paramCheck(s5);
string&& s6{""};
paramCheck(s6);
//Illegal
//const string&& s{s1};
//onstFP(s);
//Reference test
string a = s3;
a = "a changed s3";
cout << s3;
{
string& b = s3;
b = "b changed after assigning s3\n";
cout << "s3 is now " <<s3;
b = s4;
b = "b changed after assigning s4\n";
cout << "s3 is now " <<s3;
cout << "s4 is now " <<s4;
}
cin.get();
return 0;
}
Và đây là kết quả tôi nhận được:
1. Param is non-const rvalue-reference.
2. Param is non-const rvalue-reference.
3. Param is non-const ref.
4. Param is const ref.
5. Param is const ref.
6. Param is non-const ref.
s3 is now b changed after assigning s3
s3 is now b changed after assigning s4
s4 is now
Câu hỏi của tôi là:
Nếu chúng ta chuyển một biểu thức không đổi, nó luôn kích hoạt tham chiếu rvalue không liên tục? Trong điều kiện nào nó sẽ kích hoạt tham chiếu rvalue liên tục (và tại sao s6 không phải là trigging nó?)
Tại sao tham chiếu không liên tục và tham chiếu rvalue liên tục là bất hợp pháp?
Tôi dự kiến không thể thay đổi s3, nhưng tại sao b trong phạm vi bên trong có thể thay đổi s3? Nếu gán một đối tượng mới s3 cho b là gán một tham chiếu mới, tại sao khi tôi gán s4 cho nó và s3 đã thay đổi và s4 rỗng sau đó?
Xin lỗi vì đã đặt quá nhiều câu hỏi ... Tôi sẽ tăng điểm khi tất cả câu hỏi được trả lời :) Tham chiếu chỉ mang đến sự nhầm lẫn của tôi từ con trỏ đến một cấp độ hoàn toàn mới.
Tôi không biết cách tăng điểm ... vì vậy sẽ chờ 2 ngày cho đến khi đủ điều kiện nhận tiền thưởng, sau đó chọn câu trả lời.
Không có tham chiếu * tham chiếu * trong C++. Cú pháp '&&' hoặc là tham chiếu đến một tham chiếu rvalue hoặc một tham chiếu phổ quát (trong các khuôn mẫu). – dyp
Bằng cách tham chiếu tham chiếu bạn có nghĩa là tham chiếu rvalue. Tiêu chuẩn cụ thể gọi ra tham chiếu đến tham chiếu không được phép. Chỉ là FYI. C++ 11 § 8.3.2, p5: * "Sẽ không có tham chiếu đến tham chiếu, không có mảng tham chiếu, và không có con trỏ tới tham chiếu. ..." * Viết tắt cho .. well .. ngắn gọn. – WhozCraig
OK Tôi đã sửa chúng. – texasbruce