linux賦值操作符比較

2022-03-19 01:53:43 字數 943 閱讀 3507

1. 遞迴展開變數(=):類似c中define,只是簡單的替換;用=或define關鍵字都可以定義這種變數,如果變數的定義引用了其它的變數,那麼引用會一直展開下去,直到找到被引用的變數的最新的定義,並以此作為改變量的值返回。

eg:var = i love

variable = linux

var += $(variable)

variable = magic

echo $(var)

-----> i love magic;

2.簡單擴充套件變數(:=):用這種方式定義的變數,會在變數的定義點,按照被引用的變數的當前值進行展開。

m := mm

x := $(m)

y := $(x) bar

x := later

echo $(x) $(y)

$x---> later

$y---> mm bar(只管變數定義時的值,若將y:=...==> y=...,則會變成later bar)

3.可以通過+=為已定義的變數新增新的值

當變數從前沒有被定義過, +=和=是一樣的,它定義乙個遞迴展開的變數;

當變數已經有定義的時候,+=只是簡單的進行字元的新增工作。

如果起初你用:=定義變數,那麼+=只是利用變數的當前值進行新增

如果起初用=定義變數,+=的行為就變得有些古怪,它並不會在使用+=的地方馬上進行變數展開,而是會把展開工作推後,直到它找到最後變數的定義,這和=定義變數的行為是類似的

4.?= 賦預設值,如果沒有初始化該變數,就給它賦上預設值。如:

arch=arm

arch ?= i386

all:

@echo $(arch)

輸出:arm

而arch=

arch ?= i386

all:

@echo $(arch)

輸出:i386

賦值操作符

與類要控制初始化物件的方式一樣,類也定義了該型別物件賦值時會發生什麼 sales item trans,accum trans accum 與複製建構函式一樣,如果類沒有定義自己的賦值操作符,則編譯器會合成乙個。過載操作符是一些函式,其名字為 operator 後跟著所定義的操作符的符號。因此,通過...

賦值操作符

預設的賦值操作符用於處理同類物件之間的賦值,不要與複製建構函式混淆.如果是建立新的物件,則呼叫複製 拷貝 建構函式,如果是修改已有物件的值,則呼叫賦值操作符 myclass aclass myclass bclass aclass 呼叫複製建構函式 myclass cclass cclass acl...

C 賦值操作符

定義類時,編譯器會自動幫我們定義的有四個 建構函式 析構函式 複製建構函式 賦值操作符。賦值操作符定義了該型別的物件賦值時會發生什麼。過載操作符是一些函式,其名字為operator後跟著所定義的操作符的符號。通過定義名為operator 的函式,我們可以對賦值操作符進行定義。該函式有返回值和形參表。...