歡迎來拍磚
我認爲,C++中沒有一個類型是可以肯定地說是 值類型 or 引用類型 的,一切取決於你如何使用它,如果你使用指針,哪怕是int型也可以當做引用類型來用。
以上是我由思考struct類型所引發的思考的結論,接下來上代碼:
#include<iostream>
using namespace std;
struct ss{
int a;
int b;
};
int main(){
// 構造對象
ss s = {1, 2}; // or ss s = new ss(); s.a = 1; s.b = 2
// 這裏是深拷貝(就像克隆一樣,從頭到腳克隆出來一模一樣的動物,然而它們並不是同一個個體)
ss s2 = s;
s2.a = 3;
s2.b = 4;
// 將 s 賦值給 s2 ,改變 s2 的值之後,發現 s 的值並沒有改變,所以這裏的賦值顯然是 深拷貝
cout<<s.a<<", "<<s.b<<endl; // 結果是 1, 2
// 此處爲淺拷貝,原理是將 s 的地址賦值給 s3,當改變 s3地址所對應的值時,s 的值自然也變了
// 淺拷貝就像 你給寵物起的名字,你一會叫它 小寶,一會兒叫他 貝貝,但指的是同一個個體,你喂小寶,就是在喂貝貝
ss *s3 = &s;
s3->a = 3;
s3->b = 4;
cout<<s.a<<", "<<s.b<<endl; // 結果是 3, 4
return 0;
}
再舉個例子:
#include<iostream>
using namespace std;
int main(){
// 哪怕是一向以引用類型自居的string,它也是通過指針才能實現淺拷貝
string a = "asd";
string b = a;
b = "gkhj";
cout<<a<<endl; // 結果是 asd
string *c = &a;
*c = "gkhj";
cout<<a<<endl; // 結果是 gkhj
return 0;
}