Posts 关键字
Post
Cancel

关键字

extern

externC/C++中表明函数或全局变量作用域(可见性)的关键字,该关键字告诉编译器其修饰的符号可在本模块或者其他模块中使用。

extern相对的是static关键字,被static修饰的符号只能在本模块使用。externstatic是对立的,不可能同时修饰同一符号。

C++中被extern "C"修饰的变量或者函数是按照C的规则进行编译和链接的,方便在C/C++混合编程。

C/C++混合编程中需要通过extern "C"来区分C符号的原因是:C++支持函数重载,C++编译出来的函数符号带有函数名和参数信息,而C编译出来的函数符号只有函数名信息。

static

static用法总览:

about-static

参考

const

修饰变量,指针,类对象、类中成员函数

volatile

避免编译器指令优化

union

The purpose of union is to save memory by using the same memory region for storing different objects at different time.

nullptr

为什么C++开始引入nullptr表示空指针?

C++迷信类型转换不安全,禁止void*和其他类型指针之间的转换。

1
2
3
4
5
6
7
#ifndef NULL
	#ifdef __cplusplus
		#define NULL 0
    #else
		#define NULL ((void*)0)
	#endif
#endif

所以在函数重载或者模板推导时,NULL会被推导为int,导致有问题。

用来代替0或者NULL.

1
2
3
4
5
6
void f(int);
void f(void*);

f(0);       // 调用f(int);
f(NULL);    // 会有歧义,调用f(int) if NULL is 0。
f(nullptr); // 调用f(void*)
This post is licensed under CC BY 4.0 by the author.