C++中有哪些保留字?它们分别得含义是什么? C++ 保留字与关键字有什么区别?

C++\u4e2d\u7684\u6807\u8bc6\u7b26\u4fdd\u7559\u5b57\u662f\u4ec0\u4e48\u610f\u601d?

\u6807\u8bc6\u7b26(identifier)\u662f\u7528\u6237\u7f16\u7a0b\u65f6\u4f7f\u7528\u7684\u5e38\u91cf\u6216\u8005\u53d8\u91cf\u7684\u540d\u5b57 \u6bd4\u5982m_student\u3002\u3002\u3002\u4fdd\u7559\u5b57\u4e5f\u53eb\u5173\u952e\u5b57\uff0c\u517132\u4e2a\u3002\u7c7b\u578b\u8bf4\u660e\u4fdd\u7559\u5b57:int,long,short,float,double,char,unsigned,signed,const,void,volatile,enum,struct,union\u8bed\u53e5\u5b9a\u4e49\u4fdd\u7559\u5b57:if,else,goto,switch,case,do,while,for,continue,break,return,default,typedef\u5b58\u50a8\u7c7b\u8bf4\u660e\u4fdd\u7559\u5b57:auto,register,extern,static\u957f\u5ea6\u8fd0\u7b97\u7b26\u4fdd\u7559\u5b57:sizeof \u4f60\u9898\u91cc\u9762\u7684B\u9879\u4e2d\u7684 then\u4e0d\u662fC++\u91cc\u7684\u4fdd\u7559\u5b57\u3002

c\u8bed\u8a00\u4e2d\u7684\u5173\u952e\u5b57\u548c\u4fdd\u7559\u5b57\u542b\u4e49\u662f\u4e00\u6837\u7684\uff0c\u5171\u6709 32 \u4e2a\u4fdd\u7559\u5b57\u6216\u5173\u952e\u5b57\uff0c\u8fd9\u4e9b\u4fdd\u7559\u5b57\u6216\u5173\u952e\u5b57\u662f\u4e0d\u80fd\u7528\u6765\u4f5c\u4e3ac\u7a0b\u5e8f\u4e2d\u7684\u6807\u8bc6\u7b26\u7684
\u5927\u5b66 \u5b66\u9738 \u4e3a \u4f60 \u89e3 \u7b54\uff0c\u5e0c\u671b\u53ef\u4ee5\u5e2e\u52a9\u5230\u4f60

保留字肯定就是关键字撒,
(1)auto
这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。

(2)register
这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。

(3)static
常见的两种用途:
1>统计函数被调用的次数;
2>减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的,特别是数组等含有较多元素的存储类型。在一些含有较多的变量并且被经常调用的函数中,可以将一些数组声明为static类型,以减少建立或者初始化这些变量的开销.

详细说明:
1>、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2>、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
3>当static用来修饰全局变量时,它就改变了全局变量的作用域,使其不能被别的程序extern,限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。

使用注意:
1>若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
2>若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
3>设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题(只要输入数据相同就应产生相同的输出)

(4)const
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。
作用:
1>修饰输入参数
a.对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a) 改为void Func(const A &a)。
b.对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &x)。
2>用const修饰函数的返回值
a.如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。
如对于: const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();//cannot convert from 'const char *' to 'char *';
正确的用法是:
const char *str = GetString();
b.如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值。 如不要把函数int GetInt(void) 写成const int GetInt(void)。
3>const成员函数的声明中,const关键字只能放在函数声明的尾部,表示该类成员不修改对象.

说明:
const type m; //修饰m为不可改变
示例:
typedef char * pStr; //新的类型pStr;
char string[4] = "abc";
const char *p1 = string;
p1++; //正确,上边修饰的是*p1,p1可变
const pStr p2 = string;
p2++; //错误,上边修饰的是p2,p2不可变,*p2可变
同理,const修饰指针时用此原则判断就不会混淆了。

const int *value; //*value不可变,value可变
int* const value; //value不可变,*value可变
const (int *) value; //(int *)是一种type,value不可变,*value可变
//逻辑上这样理解,编译不能通过,需要tydef int* NewType;
const int* const value;//*value,value都不可变

(5)volatile
表明某个变量的值可能在外部被改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。它可以适用于基础类型如:int,char,long......也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员都会被视为volatile.
该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。
简单示例:
DWORD __stdcall threadFunc(LPVOID signal)
{
int* intSignal=reinterpret_cast(signal);
*intSignal=2;
while(*intSignal!=1)
sleep(1000);
return 0;
}
该线程启动时将intSignal 置为2,然后循环等待直到intSignal 为1 时退出。显然intSignal的值必须在外部被改变,否则该线程不会退出。但是实际运行的时候该线程却不会退出,即使在外部将它的值改为1,看一下对应的伪汇编代码就明白了:
mov ax,signal
label:
if(ax!=1)
goto label
对于C编译器来说,它并不知道这个值会被其他线程修改。自然就把它cache在寄存器里面。C 编译器是没有线程概念的,这时候就需要用到volatile。volatile 的本意是指:这个值可能会在当前线程外部被改变。也就是说,我们要在threadFunc中的intSignal前面加上volatile关键字,这时候,编译器知道该变量的值会在外部改变,因此每次访问该变量时会重新读取,所作的循环变为如下面伪码所示:
label:
mov ax,signal
if(ax!=1)
goto label

注意:一个参数既可以是const同时是volatile,是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

(6)extern
extern 意为“外来的”···它的作用在于告诉编译器:有这个变量,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。

参考http://hi.baidu.com/lzyu/blog/item/d328875189f3a62742a75b81.html

另外:C语言中的关键字
auto :声明自动变量 一般不使用
double :声明双精度变量或函数
int: 声明整型变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
else :条件语句否定分支(与 if 连用)
long :声明长整型变量或函数
switch :用于开关语句
case:开关语句分支
enum :声明枚举类型
register:声明积存器变量
typedef:用以给数据类型取别名(当然还有其他作用)
char :声明字符型变量或函数
extern:声明变量是在其他文件正声明(也可以看做是引用变量)
return :子程序返回语句(可以带参数,也看不带参数)
union:声明联合数据类型
const :声明只读变量
float:声明浮点型变量或函数
short :声明短整型变量或函数
unsigned:声明无符号类型变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句(可意会不可言传)
signed:生命有符号类型变量或函数
void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
default:开关语句中的“其他”分支
goto:无条件跳转语句
sizeof:计算数据类型长度
volatile:说明变量在程序执行中可被隐含地改变
do :循环语句的循环体
while :循环语句的循环条件
static :声明静态变量
if:条件语句

  • c璇█涓殑鍏抽敭瀛楀拰淇濈暀瀛鐨勫尯鍒?
    绛旓細c璇█涓殑鍏抽敭瀛楀拰淇濈暀瀛鐨勫尯鍒紵 鍦C璇█涓紝鍏抽敭瀛椾笌淇濈暀瀛楄〃绀哄悓涓涓蹇碉紝閮芥槸琛ㄧずC璇█鎻愪緵鐨勭壒娈婅瘑鍒鍙凤紝涓嶈兘鐢ㄤ綔鍙樻暟鍚嶃 C璇█涓鍏辨湁32涓叧閿瓧锛堟垨绉颁繚鐣欏瓧锛夛紝鍚勫叧閿瓧鍙婂叾鍚箟濡備笅锛 auto锛氭寚瀹氬彉鏁扮殑鍌ㄥ瓨鍨嬪埆锛屾槸棰勮鍊 break锛氳烦鍑哄洖鍦堟垨switch璇彞 case锛氬畾涔塻witch涓殑case...
  • c璇█涓惊鐜粨鏋勭殑淇濈暀瀛楁湁鍝簺
    绛旓細鍦ㄧ紪绋嬩腑锛屽惊鐜粨鏋勭殑浣跨敤闇瑕佽冭檻鏁堢巼鍜屼唬鐮佸彲璇绘с傞拡瀵瑰惊鐜殑浼樺寲鍖呮嫭鍑忓皯寰幆浣撳唴鐨勮绠椼佸悎鐞嗛夋嫨寰幆绫诲瀷浠ュ強閬垮厤涓嶅繀瑕佺殑宓屽寰幆绛夈備紭鍖栫殑寰幆缁撴瀯鍙互鎻愰珮绋嬪簭鐨勬墽琛屾晥鐜囥傛荤粨锛C璇█涓殑寰幆缁撴瀯淇濈暀瀛鍖呮嫭`for`銆乣while`鍜宍do-while`锛瀹冧滑鍒嗗埆鐢ㄤ簬鎺у埗涓嶅悓绫诲瀷鐨勫惊鐜傚湪缂栫▼鏃讹紝鏍规嵁鍏蜂綋鎯呭喌...
  • c璇█涓殑鍏抽敭瀛楀拰淇濈暀瀛鐨勫尯鍒?
    绛旓細鍦C璇█涓紝鍏抽敭瀛椾笌淇濈暀瀛琛ㄧず鍚屼竴涓蹇碉紝閮芥槸琛ㄧずC璇█鎻愪緵鐨勭壒娈婃爣璇嗙锛屼笉鑳界敤浣滃彉閲忓悕銆俓x0d\x0a\x0d\x0aC璇█涓鍏辨湁32涓叧閿瓧锛堟垨绉颁繚鐣欏瓧锛夛紝鍚勫叧閿瓧鍙婂叾鍚箟濡備笅锛歕x0d\x0a\x0d\x0aauto锛氭寚瀹氬彉閲忕殑瀛樺偍绫诲瀷锛屾槸榛樿鍊糪x0d\x0abreak锛氳烦鍑哄惊鐜垨switch璇彞\x0d\x0a...
  • 姹C璇█涓殑32涓叧閿瓧
    绛旓細C璇█涓殑鍏抽敭瀛楁槸缂栫▼璇█涓叿鏈鐗规畩鎰忎箟鐨淇濈暀瀛锛瀹冧滑鍦ㄧ▼搴忎腑鐢ㄤ簬瀹氫箟鍙橀噺绫诲瀷銆佹帶鍒舵祦绋嬨佺粨鏋勫畾涔夌瓑銆備互涓嬫槸C璇█涓殑32涓叧閿瓧锛屽畠浠悇鑷壆婕旂潃鍏抽敭鐨勮鑹:auto: 瀹氫箟灞閮ㄥ彉閲忥紝鍏跺瓨鍌ㄥ湪鑷姩瀛樺偍鍖恒俠reak: 鐢ㄤ簬鏃犳潯浠堕鍑虹▼搴忕殑鏈鍐呭眰寰幆銆俢ase: 鍦╯witch璇彞涓夋嫨鐗瑰畾閫夐」銆俢har: 瀹氫箟鍗曞瓧鑺傚彲...
  • c璇█鏍囪瘑绗鏈夊摢浜
    绛旓細C璇█鏍囪瘑绗︽湁浠ヤ笅鍑犵被锛1. 鍏抽敭瀛楀拰淇濈暀瀛锛氳繖浜涙槸C璇█棰勫畾涔夌殑鏍囪瘑绗︼紝鍏锋湁鐗规畩鍚箟锛屽`int`銆乣float`銆乣if`銆乣else`绛夈傝繖浜涘叧閿瓧涓嶈兘浣滀负鍙橀噺鍚嶆垨鍏朵粬鑷畾涔夋爣璇嗙浣跨敤銆瀹冧滑鏄疌璇█缂栬瘧鐨勫熀纭缁勬垚閮ㄥ垎锛屽叿鏈夊浐瀹氱殑鍚箟鍜岀敤娉曘2. 鍙橀噺鍚嶏細鐢ㄤ簬鏍囪瘑瀛樺偍浣嶇疆鐨勫悕绉帮紝濡俙a`銆乣b`銆乣sum`绛...
  • C++涓湁鍝簺淇濈暀瀛?瀹冧滑鍒嗗埆寰楀惈涔夋槸浠涔?
    绛旓細鑷劧灏辨妸瀹僣ache鍦ㄥ瘎瀛樺櫒閲岄潰銆C 缂栬瘧鍣ㄦ槸娌℃湁绾跨▼姒傚康鐨,杩欐椂鍊欏氨闇瑕佺敤鍒皏olatile銆倂olatile 鐨勬湰鎰忔槸鎸囷細杩欎釜鍊煎彲鑳戒細鍦ㄥ綋鍓嶇嚎绋嬪閮ㄨ鏀瑰彉銆備篃灏辨槸璇达紝鎴戜滑瑕佸湪threadFunc涓殑intSignal鍓嶉潰鍔犱笂volatile鍏抽敭瀛楋紝杩欐椂鍊欙紝缂栬瘧鍣ㄧ煡閬撹鍙橀噺鐨勫间細鍦ㄥ閮ㄦ敼鍙橈紝鍥犳姣忔璁块棶璇ュ彉閲忔椂浼氶噸鏂拌鍙栵紝鎵浣滅殑寰幆...
  • C璇█涓殑瀛楃鍙橀噺鐢浠涔堜繚鐣欏瓧璇存槑?
    绛旓細1銆佹湁绗﹀彿瀛楃锛屽彲浠ヤ娇鐢╯igned char鍜宑har杩涜璇存槑锛屽湪鍗曠嫭鍐檆har鐨勬椂鍊欙紝绯荤粺榛樿鎸夋湁绗﹀彿澶勭悊銆傛墍浠ュぇ澶氭暟鎯呭喌涓嬶紝鏄彧鍐檆har鐨勩傛瘮濡俢har c;2銆佹棤绗﹀彿瀛楃锛岄渶瑕佺敤unsigned char鏉ヨ鏄庯紝濡倁nsigned char d;3銆佸湪娌℃湁棰濆璇存槑鎯呭喌涓嬶紝瀛楃鍙橀噺涓鑸寚甯︾鍙风殑瀛楃鍙橀噺锛屽嵆char绫诲瀷銆C璇█ C璇█鏄竴闂...
  • C璇█涓殑瀛楃鍙橀噺鐢浠涔堜繚鐣欏瓧璇存槑
    绛旓細C璇█涓殑瀛楃鍙橀噺鐢淇濈暀瀛char鏉ュ畾涔夈傛瘡涓瓧绗﹀彉閲忎腑鍙兘瀛樻斁涓涓瓧绗︺傚湪涓鑸郴缁熶腑锛屼竴涓瓧绗﹀彉閲忓湪璁$畻鏈哄唴瀛樹腑鍗犱竴涓瓧鑺傘備笌瀛楃甯搁噺涓鏍凤紝瀛楃鍙橀噺涔熷彲浠ュ嚭鐜板湪浠讳綍鍏佽鏁村瀷鍙橀噺鍙備笌鐨勮繍绠椾腑銆侰璇█涓殑瀛楃涓插父閲忔槸鐢变竴瀵瑰弻寮曞彿鎷捣鏉ョ殑瀛楃搴忓垪銆傛敞鎰忎笉瑕佸皢瀛楃甯搁噺鍜屽瓧绗︿覆甯搁噺娣锋穯锛屾病鏈変笓闂ㄧ殑...
  • 鍦C璇█涓湁鍝簺瀹规槗琚贩涓淇濈暀瀛鐨勭敤鎴锋爣璇嗙
    绛旓細鍏抽敭瀛楁槸鐢C璇█瑙勫畾鐨勫叿鏈夌壒瀹氭剰涔夌殑瀛楃涓诧紝閫氬父涔熺О涓淇濈暀瀛銆傜敤鎴峰畾涔夌殑鏍囪瘑绗︿笉搴斾笌鍏抽敭瀛楃浉鍚屻侰璇█鐨勫叧閿瀛楀垎涓轰互涓嬪嚑绫伙細(1)绫诲瀷璇存槑绗︾敤浜庡畾涔夈佽鏄庡彉閲忋佸嚱鏁版垨鍏跺畠鏁版嵁缁撴瀯鐨勭被鍨嬨傚鍓嶉潰渚嬮涓敤鍒扮殑int,double绛(2)璇彞瀹氫箟绗︾敤浜庤〃绀轰竴涓鍙ョ殑鍔熻兘銆傚渚1.3涓敤鍒扮殑ifelse灏辨槸鏉′欢...
  • c璇█绗﹀彿鏈夊摢浜???
    绛旓細C璇█甯歌绗﹀彿鍒嗙被鐪嬪畬浣犲氨鎳備簡...1銆佸叧閿瓧 鍏抽敭瀛楋紝鍙堢О涓淇濈暀瀛锛屼粬浠槸C璇█涓鍏堣瀹氱殑鍏锋湁鍥哄畾鍚箟鐨勪竴浜涘崟璇嶏紝渚嬪C璇█鐨勭涓涓▼搴忎腑鐨刬nt鍜宺eturn绛夛紝鐢ㄦ埛鍙兘鎸夐鍏堣瀹氱殑鍚箟鏉ヤ娇鐢ㄤ粬浠笉鑳芥搮鑷敼鍙樺叾鍚箟銆2銆佹爣璇嗙 鏍囪瘑绗﹀垎涓虹郴缁熼瀹氫箟鏍囪瘑绗﹀拰鐢ㄦ埛鑷畾涔夋爣璇嗙涓ょ被銆傞【鍚嶆濅箟锛岀郴...
  • 扩展阅读:c++编程 ... c++关键字表 ... c++中<< ... c++课本下载 ... c++和python先学哪个 ... c++的关键字有哪些 ... c语言保留字一览表 ... c++数学题 ... c++栈函数 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网