常量
使用巨集define
定義常量是常見的行為,在c++中還可以使用const
關鍵字來實現常量的定義。
const double pi = 3.1415926535;
在類中使用常量,為了避免每個例項都產生乙個常量,可以使用
static const double pi = 3.1415926535
但是在函式中定義的常量,即使重複呼叫函式,也不會發生浪費空間的問題。
常引用、常指標
在某些情況下,如在函式引數傳遞中,為避免使用引用、指標修改指向的變數,可使用如下形式的 const 。此時雖然指向的物件可能是非 const 的,但是無法通過 const 引用或 const 指標修改。
void f(const double& t);
void f(const double* p);
另外,如果目的是防止指標本身被修改,可以使用double* const p
的形式。(引用沒有這種問題,因為引用無法被修改。)
const
修飾的函式返回值
const
修飾下的函式返回值,可以防止該值被修改,但是接收該函式返回值的變數也必須有const
屬性。
const int f() {}
const int a = f();
const
修飾的成員函式
被const
修飾的成員函式,不修改例項的成員變數。另外,如果乙個物件例項化為乙個常量物件,只能呼叫它的常成員函式。
class typesample
}
靜態全域性變數與靜態區域性變數
使用static
修飾全域性變數,與無static
修飾的全域性變數功能相同,區別為被static
修飾後的全域性變數只能在本檔案中使用,在其他檔案中無法使用。
使用static
修飾函式內的區域性變數,可以使該變數在函式執行結束時不被銷毀,可以利用靜態區域性變數實現多次函式呼叫間的資訊傳遞。需要強調的是,static
並不改變區域性變數的作用域,也就是說在函式外部是無法訪問靜態區域性變數的。
靜態函式
在函式的宣告前加上static
修飾,作用與靜態全域性變數相同,使該函式只能在本檔案中使用,在其他檔案中無法使用。
靜態成員變數與靜態成員函式
使用static
修飾的類成員變數,與普通的成員變數的區別是:普通成員變數是屬於例項的,但是靜態成員變數是屬於類的,是類的所以例項所共有的。可以用來存放類的常量,以及僅與類本身相關的屬性。
同樣的,靜態成員函式是屬於類的,與普通的成員函式的區別是:普通成員函式都隱含了this
指標,該指標指向例項本身,用來訪問例項的成員變數和成員函式,但this
指標不是指向類的,故靜態成員函式沒有this
指標。這種區別造成了靜態成員函式只能訪問靜態成員變數,也只能呼叫靜態成員函式,但普通成員函式沒有這種限制;另外可以使用class_name::static_func()
的方式直接呼叫靜態成員函式。
使用外部變數
如果需要在某個工程檔案中使用其它檔案中定義的變數,可以使用extern指定。在需要使用外部變數的地方,放置乙個extern
修飾的變數宣告即可。
#include "other.h"
extern int param; // 此變數在 other.h 中有定義
使用 c 的**
extern
的另乙個使用方法是在 c++ 中使用 c 的**。在需要使用 c 的地方,使用extern "c"
告知編譯器。
extern "c"
// 如果只想使用其中的乙個函式
extern "c"
const
關鍵字並沒有明確說明是在編譯期間為常量還是在執行期間為常量,constexpr
告知編譯器該語句或函式在編譯期間就是常量,也就是說這些語句或函式在編譯期間就可以計算出來。constexpr
比const
更為嚴格,但是能夠讓編譯器對**進行更多的優化,在能使用constexpr
的情況下推薦使用constexpr
代替const
。
auto
關鍵字用於宣告變數時自動推導變數的型別,適合冗長的變數型別,過多的使用auto
會造成**可讀性下降,另外某些情況下auto
可能存在歧義,為後續**帶來隱患。
decltype()
也是用於推導變數的型別,用於已經存在的變數。
auto iter = vec.begin();
using iter = decltype(iter);
動態規劃 揹包問題 P02 完全揹包
完全揹包問題也是乙個相當基礎的揹包問題,它有兩個狀態轉移方程,分別在 基本思路 以及 o vn 的演算法 的小節中給出。有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是w i 價值是c i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。這個問題...
AT24C02的知識總結
這週做清除報警記錄功能,所使用的儲存器晶元是at24c02,下面介紹at24c02使用的幾點關鍵點 1.at24c02寫資料和讀資料都是乙個位元組 8位 讀2個位元組 16位 會出錯,看下面datasheet 2.at24c02有2k的儲存容量,2k 2 1024 2048個位元組 所以最多可以往a...
c 獲取當前路徑 P02絕對路徑和相對路徑
本地檔案讀寫依賴檔案路徑,本節簡單介紹下相對路徑和絕對路徑,只侷限在本地路徑,不涉及網路路徑。絕對路徑 絕對路徑就是以根目錄為參照系的路徑,根目錄 windows下是碟符 是固定的,所以每個檔案只有乙個絕對路徑。windows下資料夾的位址列展示的就是當前資料夾的絕對路徑,或者開啟命令列工具 在位址...