C++ 基礎(chǔ)(一)

目錄

前言

自工作以來接觸了 OC馆揉、Swift嗡贺、RN隐解、C 語言,簡單的了解過H5 和 Python诫睬。OC 是一直在使用的語言煞茫,Swift 僅使用過三四個月,自學(xué) RN 一個月摄凡,C 語言是在剛?cè)胄械臅r候才接觸一點(diǎn)续徽。RN 目前已完全忘記,Swift 仍然有一些記憶亲澡,再容易上手的語言沒有經(jīng)常鞏固使用也可能忘記钦扭。Swift 語言之所以比 RN 印象深刻,可能在于三點(diǎn):使用時間比 RN 長床绪、用于實(shí)際開發(fā)客情、之前在簡書中做過一些筆記捎琐。打算寫兩篇簡單文章,更多的是作為個人筆記裹匙。

筆者也深深的認(rèn)同:編程語言只是一門工具瑞凑,重要的在于理解它的思想以及原理,并能應(yīng)用到實(shí)際中概页。雖說各種編程語言只是一種工具籽御,但并不意味著掌握了一門語言就無需再去了解其他語言,學(xué)習(xí)不同語言的優(yōu)秀思想惰匙,能提供不同的編程思維視角技掏,在自己所熟悉的領(lǐng)域中加以應(yīng)用,可增加對編程的理解项鬼,站在更高的維度去思考代碼哑梳。另外,很多語言都有共通之處绘盟,但某些語言可能更加接近底層鸠真,能加深對一些通用性原理知識的理解,比如 C++ 的面向過程和面向?qū)ο蟆?/p>

一龄毡、C++ 介紹

C++ 有四十年左右的歷史吠卷,很多流行語言的根源都是 C++,比如Java沦零、Python 等祭隔,包括 iOS 開發(fā)人員熟悉的Swift 語言,其中半數(shù)是通過 C++ 編寫的路操,OC 中的 Runtime 源碼也是包含了 C++ 和 C疾渴。C++ 應(yīng)用的領(lǐng)域很廣泛游戲(Cocos2d-x)、圖像(OpenGL)屯仗、數(shù)據(jù)庫搞坝、瀏覽器、搜索引擎祭钉、操作系統(tǒng)甚至包括編譯器 GCC 和 LLVM 以及 Android 開發(fā)中的圖片加載框架 fresco 都能看到 C++ 的身影瞄沙。C++ 之所以應(yīng)用如此廣泛,主要在于其高效性和跨平臺性慌核。

一門優(yōu)秀的語言不可能總是一成不變的距境,C++ 多年來不斷的按照標(biāo)準(zhǔn)規(guī)范升級,不斷發(fā)展和完善自身垮卓。以下是C++的各種版本垫桂。

Year C++ Standard Informal name
1998 ISO/IEC 14882:1998[23] C++98
2003 ISO/IEC 14882:2003[24] C++03
2011 ISO/IEC 14882:2011[25] C++11, C++0x
2014 ISO/IEC 14882:2014[26] C++14, C++1y
2017 ISO/IEC 14882:2017[9] C++17, C++1z
2020 to be determined C++20[17]

二、函數(shù)重載 overload

函數(shù)名相同粟按,參數(shù)個數(shù)不同诬滩、參數(shù)類型不同霹粥、參數(shù)順序不同。但是注意返回值類型與函數(shù)重載無關(guān)疼鸟。之所以可以重載后控,是因?yàn)橹剌d時會生成多個不同的函數(shù)名,不同編譯器有不同的生成規(guī)則空镜。

void test(long a){
    cout << a << "float";
}
void test(int b){
    cout << b << "int";
}
int main(int argc, const char * argv[]) {
    test(3l);
    test(2);
    return 0;
}

三浩淘、C && C++

在C、C++混合開發(fā)時吴攒,C++在調(diào)用C語言张抄,需要使用 extern "C" 修飾 C 語言的函數(shù)聲明。注意 extern "C" 修飾 的 C 語言函數(shù)不能重載洼怔。
方式一:

//sum.h 文件
#ifdef __cplusplus
    extern "C" {
#endif
        int sum(int a, int b);
#ifdef __cplusplus
    }
#endif

//sum.m 文件
#include "sum.h"
int sum(int a, int b){
    return a + b;
}

方式二:

using namespace std;
extern "C" void test(long a);//聲明
int main(int argc, const char * argv[]) {
    test(1);
    return 0;
}
void test(long a){//實(shí)現(xiàn)
    cout << a << "float";
}

四署惯、默認(rèn)參數(shù)默認(rèn)值

void test(int a = 3, int b = 4){
    cout << "a is " << a << endl;
    cout << "b is " << b << endl;
}
int main(int argc, const char * argv[]) {
    test();
    test(1);
    test(1,2);
    return 0;
}

五、內(nèi)聯(lián)函數(shù)

參考該篇文章的包體積優(yōu)化中的內(nèi)聯(lián)函數(shù)

六镣隶、函數(shù)指針

void test1() {
    cout << "test()" << endl;
}
void test(int a, void (*func)()) {
    cout << "a is " << a << endl;
    cout << "func is " << func << endl;
    func();
}
int main(int argc, const char * argv[]) {
    test(10,test1);
    return 0;
}

七极谊、pragma once

新建一個文件名為test.h 的頭文件,內(nèi)容如下:

#ifndef __TEST_H
#define __TEST_H
void test();
#endif

其中 #ifndef矾缓、#define怀酷、#endif 來防止頭文件的內(nèi)容被重復(fù)包含。借助 pragma once 也能實(shí)現(xiàn)類似效果嗜闻。#ifndef、#define桅锄、#endif 受 C\C++ 標(biāo)準(zhǔn)的支持琉雳,不受編譯器的任何限制。但有些編譯器不支持 #pragma once友瘤, 且 #pragma once只能針對整個文件翠肘, #ifndef、#define辫秧、#endif 可以針對部分代碼束倍。

#pragma once
void test();

八、引用

C 中使用指針(Pointer)可以間接獲取盟戏、修改某個變量的值绪妹,C++中,使用引用(Reference)可以起到跟指針類似的功能柿究。

int age = 10;
//referenceAge是引用
int &referenceAge = age;
referenceAge = 30;
//數(shù)組的引用
int array[] = { 10, 20, 30 };
int (&rArray)[3] = array;

引用相當(dāng)于是變量的別名邮旷,基本數(shù)據(jù)類型、枚舉蝇摸、結(jié)構(gòu)體婶肩、類办陷、指針、數(shù)組等律歼,都可以有引用民镜,對引用做計算,就是對引用所指向的變量做計算险毁。在定義的時候就必須初始化殃恒,一旦指向了某個變量,就不可以再改變辱揭,非定義引用時使用&,后續(xù)再使用&表示取地址离唐。引用就本質(zhì)而言是指針,只是編譯器削弱了它的功能问窃,所以引用就是弱化了的指針亥鬓。引用比指針更安全,因?yàn)橐貌荒芟裰羔樐菢又赶蛉我忸愋偷刂贰?/p>

可以利用引用初始化另一個引用域庇,相當(dāng)于某個變量的多個別名嵌戈。

int &rAge = age;
int &rAge1 = rAge;
int &rAge2 = rAge1

九、常引用

引用可以被const修飾听皿,這樣就無法通過引用修改數(shù)據(jù)了熟呛,稱為常引用。

int age = 10;
const int &rAge = age;
rAge = 30;

常引用可以指向臨時數(shù)據(jù)尉姨,如常量庵朝、表達(dá)式、函數(shù)返回值等又厉。

//編譯報錯
int &rAge = 10;
//假設(shè)上一句代碼編譯可以通過九府,打開下面代碼注釋,相當(dāng)于 50 = 10覆致,此種情況很是怪異侄旬,所以第一行代碼無法編譯通過。
//rAge = 50煌妈;

上述代碼實(shí)際是編譯不過的儡羔。若想編譯通過,需要在前面加上 const 璧诵。

const int &rAge = 10;

十汰蜘、C++ 編程規(guī)范

  • 全局變量: g_
  • 成員變量: m_
  • 靜態(tài)變量: s_
  • 常量: c_
  • 使用駝峰命名方式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腮猖,隨后出現(xiàn)的幾起案子鉴扫,更是在濱河造成了極大的恐慌,老刑警劉巖澈缺,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坪创,死亡現(xiàn)場離奇詭異炕婶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)莱预,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門柠掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人依沮,你說我怎么就攤上這事涯贞。” “怎么了危喉?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵宋渔,是天一觀的道長。 經(jīng)常有香客問我辜限,道長皇拣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任薄嫡,我火速辦了婚禮氧急,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毫深。我一直安慰自己吩坝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布哑蔫。 她就那樣靜靜地躺著钉寝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸳址。 梳的紋絲不亂的頭發(fā)上瘩蚪,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音稿黍,去河邊找鬼。 笑死崩哩,一個胖子當(dāng)著我的面吹牛巡球,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邓嘹,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼酣栈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汹押?” 一聲冷哼從身側(cè)響起矿筝,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棚贾,沒想到半個月后窖维,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榆综,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年铸史,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼻疮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡琳轿,死狀恐怖判沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崭篡,我是刑警寧澤挪哄,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站琉闪,受9級特大地震影響迹炼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塘偎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一疗涉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吟秩,春花似錦咱扣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壮池,卻和暖如春偏瓤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椰憋。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工厅克, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人橙依。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓证舟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窗骑。 傳聞我的和親對象是個殘疾皇子女责,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345