go 型別的值語義和引用語義

2021-10-06 15:11:01 字數 580 閱讀 1358

go語言重大部分型別都是基於值語義,包括:

1.基本型別:byte,int,bool,float32,float64,string等;

2.復合型別:陣列array,結構體struct,指標pointer等;

重點來了,c/c++中,陣列傳遞是引用語義,但在go中,陣列和基本型別沒啥區別,都是值語義,也就是說,go中的陣列傳遞是完全值傳遞

不理解?看例子!

//c或c++中

int adata[3] = ;

auto p = adata; //實際上這裡相當於 int* p = adata

p[1]++; //最終導致 adata =

//go中

var a = [3]int

var b = a

b[1]++ // 最終a=並沒有被改變

那麼如何能引用傳遞呢?很簡單,用指標形式,看例子!

//這裡演示陣列的引用傳遞

var a=[3]int

b[1]++ //最終會改變a=

C 類設計思考(二) 值語義與引用語義

類設計前首先需要確定的是,該類所例項化的物件是值語義還是引用語義。值語義 一般用於非獨占性資源物件,表示該物件可以像int 一樣的工作,可以任意的拷貝和重新賦值,而不會引起資源洩漏或者切割 指部分資源釋放而部分洩漏 引用語義一般用於獨占性資源封裝 物件,表示該物件不允許拷貝和重新賦值。從語法的角度上...

右值引用和move語義

標籤 c 11 c lvalue rvalue 2013 10 04 20 49 2909人閱讀收藏 舉報 c 6 目錄 lvalue 具有儲存性質的物件,即lvalue物件,是指要實際占用記憶體空間 有記憶體位址的那些實體物件,例如 變數 variables 函式 函式指標等。rvalue 相比較...

右值引用和移動語義

在c 當中,所有的變數和表示式都被分為左值和右值。所謂的左值,就是可以被定址的非臨時變數。右值就是無法被定址的臨時變數。左值引用用 符號表示,右值引用用 符號表示。左值引用 int n int np new int const int cn 100 int nr n int npr np const...