C 中你不知道的語法

2021-06-07 14:07:21 字數 3145 閱讀 7197

傳建構函式,不會引起拷貝建構函式的呼叫

當傳乙個乙個已經構造好的物件時,

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

class

foo  

~foo()  

foo(const

foo& rhs)  

foo& operator=(const

foo& rhs)  

};  

void

f(foo f)  

intmain()    

結果為:

[c-sharp]view plain

copy

ctr  

copy-ctr  

dectr  

dectr  

當傳參時構造物件時,

[c-sharp]view plain

copy

intmain()    

結果就變成:

[c-sharp]view plain

copy

ctr  

dectr  

引申:同理在模板類當中,同樣成立,你不要把它看成乙個函式呼叫了,它是也乙個臨時物件。如下:

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

template

<

typename

t>  

class

print  

~print()  

print(const

print& rhs)  

print& operator=(const

print& rhs)  

void

operator()(

const

t& elem)  

};  

void

f(print<

int> f)  

intmain()    

new操作符-空間還可以這樣分配

[cpp]view plain

copy

#include 

using

namespace

std;  

class

foo  

~foo()  

foo(const

foo& rhs)  

foo& operator=(const

foo& rhs)  

};  

intmain()    

在上例中,foo *p2 = new(p) foo(f); 意思是說在物件p的空間上,構造乙個跟f一樣的物件。

而foo *p3 = new(str) foo(f);是在乙個字串的空間上構造的。

下面兩個函式實際上事一樣的,你知道麼?

[cpp]view plain

copy

typedef

void

(*func)();  

func set_handler1(func f)  

void

(* set_handler2(

void

(*f)()))()    

物件的隱式構造

[cpp]view plain

copy

//隱式構造

class

foo  

foo(const

foo& f)  

foo& operator=(const

foo& f)  

~foo()  

};  

class

test  

};  

void

test()  

intmain()    

這是可以執行的,也是c++支援的.

如果你不想讓它這樣趁你不注意,偷偷摸摸的構造了物件, 你可以在建構函式前面加上explicit.

[c-sharp]view plain

copy

class

foo  

foo(const

foo& f)  

foo& operator

=(const

foo& f)  

~foo()  

};  

這時,就會報錯.

預編譯指令的妙處

[cpp]view plain

copy

#define _b(x) #x

#define print(x, y, z) print_##z(x,y)

class

biginteger  

};  

void

print_max(

inti, 

intj)  

void

print_min(

inti, 

intj)  

void

test(

inti, 

intj)  

intmain()    

你猜猜結果?

上面的#x表示把x生成成為乙個字串.

a##b是把ab連線成乙個字串.

上面的兩個用法和用途,相信可以讓你感到妙不可言.

結果:[c-sharp]view plain

copy

12122222222222222222222222  

2  1  

請按任意鍵繼續. . .  

《你不知道的JS(中卷 )》 五 語法

語法 grammar 與詞法 syntax 不同。後者強調語言的運算子 關鍵字等。而語法定義了此法規則是如何構成可執行的程式 的。語句 statement 與表示式 expression 舉例說明 var a 3 6 a 3 6是乙個賦值表示式,加上var,就表明是乙個宣告同時賦值的語句,即語句由乙...

你不知道的 和

開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...

你不知道的box shadow

我們可以僅使用乙個div利用shadow配合animation實現很多豐富的效果 github 求 必需。水平陰影的位置。允許負值。v shadow 必需。垂直陰影的位置。允許負值。blur 可選。模糊距離。spread 可選。陰影的尺寸。color 可選。陰影的顏色。請參閱 css 顏色值。ins...