關(guān)鍵字,標(biāo)識符
和其他計算機語言一樣,變量命名不能和關(guān)鍵字一樣,大小寫敏感
存儲類型
extern
static
register
auto
結(jié)構(gòu)體
結(jié)構(gòu)體位域定義和訪問,如
struct Head{
unsigned char :2; //空兩個bit位
unsigned char type:4; //訪問的時候直接從第3三個bit處賦值
unsigned char version:2;
};
指針
指針加減并不是純粹給地址值加減,而是代表上移或下移一個單位的地址量
int main(){
int num[] = {11,34};
int* addr = num;
addr = addr + 1; //此時addr指向第二個數(shù)組元素
return 0;
}
const關(guān)鍵字
const int* p1 = &a; //不能修改指向的值,即常量的指針(常量指針)
int* const p2 = &a; //不能修改地址,即指針是個常量(指針常量)
const int* const p3 = &a; //既不能修改地址,也不能修改地址指向的值
const寫在類型的前面,表示不能修改地址指向的值(意思是不能通過指針p修改a里面的內(nèi)容),但是可以給p重新賦值一個地址。
const寫在變量的前面,表示不能修改指向的地址,但是可以修改地址指向的值。
void m(const Studnet*);
void m1(Studnet*);
int main(){
const Studnet *stu = new Student(); //stu對象只能訪問const修飾的方法和變量
m(stu);
// m1(stu); //錯誤:const修飾的變量只能傳給const修飾的參數(shù)列表
}
decltype關(guān)鍵字
decltype返回一個表達式的類型,其功能是在編譯期確定一個數(shù)據(jù)類型
long getNum ();
int main () {
int num1 = 12;
decltype(num1) num2; //num2是int類型
decltype(getNum()) num3; //num3是long類型
}
注意:decltype只做類型推導(dǎo),上述第6行代碼中并不會運行g(shù)etNum()函數(shù)
sizeof運算符
sizeof 不僅可以計算結(jié)構(gòu)體的大小(注意字節(jié)對齊),還可以計算變量的大小
typedef struct S1{ //sizeof = 2;
char a;
char b;
} S1;
typedef struct S2{ //sizeof = 8;
char a;
int b;
} S2;
函數(shù)
有默認(rèn)參數(shù)值的參數(shù)必須要寫在參數(shù)列表的右側(cè),如
int method(int n1, int n2, int n3=120, n4=32);
參數(shù)傳遞
不定長的參數(shù)列表
作用域相關(guān)
局部訪問全局的同名變量需要添加域運算符
int global = 100;
int main(){
int global = 111;
cout<<::global<
命名空間的嵌套
namespace Person {
string name;
namespace Student {
string job;
}
}
using namespace Person::Student;//Person命名空間中的屬性不能被訪問
int main() {
//name = "毛"; 錯誤:name不能被訪問
job = "學(xué)生";
return 0;
}
未起名字的命名空間只能在當(dāng)前文件訪問。
|