目錄
bool強(qiáng)轉(zhuǎn)
const構(gòu)成重載:const修飾*p
?移動(dòng)構(gòu)造
new int (10)所做的四件事
this指針---為什么函數(shù)里面需要this指針?
.和->的區(qū)別
new創(chuàng)建對(duì)象
仿函數(shù)
new和malloc的區(qū)別
c++系統(tǒng)自動(dòng)給出的函數(shù)有
delete和delete[ ]區(qū)別何在
檢查有沒(méi)有析構(gòu)函數(shù)
explict外部
內(nèi)存泄漏的本質(zhì):丟失了內(nèi)存地址
不能重載的運(yùn)算符:?:、::、*.
using
為什么空間釋放了但還是可以讀取數(shù)據(jù)
函數(shù)的生存期不受函數(shù)生存期影響時(shí),可以使用引用返回;
struct和class在設(shè)計(jì)類(lèi)時(shí)的區(qū)別
結(jié)構(gòu)體為什么一定要內(nèi)存對(duì)齊?
c++11的鐵三角
右值/左值/值返回與將亡值
a++不可以取地址;++a可以取地址
引用的本質(zhì)是指針,自身為常性
bool強(qiáng)轉(zhuǎn)
可以將變量變?yōu)閎ool類(lèi)型,在if語(yǔ)句中可以判斷
operator bool() const
{
? ? return (ptr !=nullptr);
}
const構(gòu)成重載:const修飾*p
void func(int *p){}
void func(const int* p){}
?移動(dòng)構(gòu)造
my_unique_ptr(const my_unique_ptr&& x)
{
? ? ptr = x.ptr;
? ? x.ptr = nullptr;
}
拷貝構(gòu)造和移動(dòng)構(gòu)造同時(shí)書(shū)寫(xiě)了,那么就會(huì)調(diào)用移動(dòng)構(gòu)造
new int (10)所做的四件事
1.計(jì)算10的大小 2.malloc 3.賦值 4.返回所在地址
new沒(méi)有能力去構(gòu)造常對(duì)象?
is具有常性,不可以對(duì)is的指向進(jìn)行修改。
?const修飾*is,is的指向可以修改
this指針---為什么函數(shù)里面需要this指針?
- 創(chuàng)建對(duì)象類(lèi)型有多個(gè),方法共享只有一個(gè),用this來(lái)調(diào)用函數(shù)方法
- 系統(tǒng)是面向過(guò)程編程,底層把面向?qū)ο缶幊套優(yōu)槊嫦蜻^(guò)程的體系
- 類(lèi)的成員函數(shù)都含有this指針,只有static,友元,全局沒(méi)有this指針。
.和->的區(qū)別
. ?的時(shí)候函數(shù)都是智能指針的方法
?-> 的時(shí)候函數(shù)都是 類(lèi) 類(lèi) 型 的方法
new創(chuàng)建對(duì)象
std::unique_ptr<Int> ip(new(10));
?
std::unique_ptr<Int> sp=new Int(100);
仿函數(shù)
struct ADD
{
?? ?int operator()(int a, int b) const//仿函數(shù)()
?? ?{
?? ??? ?return a + b;
?? ?}
};
?
int main()
{
?? ?ADD add;
?? ?int x = add(12, 23);//調(diào)用仿函數(shù)
?? ?//標(biāo)準(zhǔn)c++沒(méi)有三元仿函數(shù)
?? ?x = add.operator()(12, 23);//把括號(hào)當(dāng)成函數(shù)名了
}
new和malloc的區(qū)別
- 失敗處理方式不同,new會(huì)拋出異常,malloc不會(huì)
- new有構(gòu)造函數(shù)予以賦值
- new有重載運(yùn)算符
c++系統(tǒng)自動(dòng)給出的函數(shù)有
- 缺省的構(gòu)造
- 缺省的拷貝構(gòu)造
- 缺省的析構(gòu)
- 缺省的賦值
?!?。∫陨纤膫€(gè)必須有
delete和delete[ ]區(qū)別何在
int main()
{
? ? Int* p=new Int(10);
? ? Int*s =new Int[10];
?
? ? delete p;
? ? delete[]s;
? ? return 0;
}
檢查有沒(méi)有析構(gòu)函數(shù)
小tips:寫(xiě)代碼判斷是否相等時(shí)得把常量放在左邊,變量放在右邊
explict外部
內(nèi)存泄漏的本質(zhì):丟失了內(nèi)存地址
不能重載的運(yùn)算符:?:、::、*.
using
是類(lèi)型重定義(命名),和typdef的意義差不多
為什么空間釋放了但還是可以讀取數(shù)據(jù)
int ar[100000];棧幀構(gòu)建的太大,數(shù)據(jù)在接近棧處,即使把空間釋放了,但是在處理過(guò)程中無(wú)法干擾數(shù)據(jù),所以值還是可以被打印出來(lái)
函數(shù)的生存期不受函數(shù)生存期影響時(shí),可以使用引用返回;
struct和class在設(shè)計(jì)類(lèi)時(shí)的區(qū)別
* 1.模板類(lèi)型定義class可以,typename可以,struct不可以
* 2.struct默認(rèn)公有,class默認(rèn)私有
* 3.在設(shè)計(jì)類(lèi)型時(shí),純虛函數(shù)interface
*/
結(jié)構(gòu)體為什么一定要內(nèi)存對(duì)齊?
提高內(nèi)存的訪(fǎng)問(wèn)效率
結(jié)構(gòu)體內(nèi)存對(duì)齊是拿空間換取時(shí)間的做法。提高效率
c++11的鐵三角
C++11和C11都是C++11
右值/移動(dòng)/完美轉(zhuǎn)發(fā)
右值/左值/值返回與將亡值
?通用寄存器eax,ebx,ecx,edx(都只有四字節(jié)),作為將亡值的返回時(shí)的保存
?如何將結(jié)構(gòu)體初始化后返回到調(diào)用函數(shù)內(nèi)?
值返回時(shí)?會(huì)在主函數(shù)中建立一個(gè)將亡值的副本,把調(diào)用函數(shù)返回值(將亡值)賦給指針(內(nèi)置類(lèi)型)產(chǎn)生的將亡值不可寫(xiě)
?將亡值沒(méi)有名字就是純右值(歸結(jié)到右值中),有名字就是泛左值(歸結(jié)到左值中)
?將亡值在表達(dá)式的計(jì)算中產(chǎn)生
將亡值可修改嗎:
1.內(nèi)置類(lèi)型值返回時(shí)的將亡值不可以修改
2.類(lèi)類(lèi)型(即程序員自己設(shè)計(jì)的類(lèi)型)值返回時(shí)的將亡值可修改
a++不可以取地址;++a可以取地址
a++是一個(gè)沒(méi)有名字的將亡值(a+1) 還沒(méi)有給a賦值,取地址(先取地址再++)
++a是先把將亡值(a+1)已經(jīng)賦值給了a,再取地址(先++再取地址)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-468276.html
引用的本質(zhì)是指針,自身為常性
static沒(méi)有this指針
static函數(shù)與非static函數(shù)最大的區(qū)別文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468276.html
到了這里,關(guān)于一些關(guān)于c++的瑣碎知識(shí)點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!