C++关键字列表

来源:互联网 发布:linux回到根目录 编辑:程序博客网 时间:2024/05/22 05:12

C++关键字列表及部分解析

这一部分从百度百科找来的,链接:http://b.baidu.com/view/3111818.htm

ISO C++98/03 关键字

ISO C++98/03关键字共63个,此处严格按标准原文排版:
asm
do
if
return
typedef
auto
double
inline
short
typeid
bool
dynamic_cast
int
signed
typename
break
else
long
sizeof
union
case
enum
mutable
static
unsigned
catch
explicit
namespace
static_cast
using
char
export
new
struct
virtual
class
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
register
true
 
delete
goto
reinterpret_cast
try
 


C++11新关键字详解

alignas

alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型。和sizeof类似,两者的操作数都不被求值。

constexpr

类似const但更强大,修饰函数或对象,表示函数结果或对象是编译时决定的常量,以便优化。(const不能修饰一般的函数,也不一定指定声明的对象能编译期的常量表达式,更可能只是只读对象。而在C语言中,const完全只能指定只读对象。)

char16_t 和 char32_t

二者分别表示16位字符型和32位字符型,类似char和wchar_t,也是一般只专用于表示字符的整数类型,且设计上用于表示Unicode字符。char16_t和char32_t是C++11新增的,以克服wchar_t在不同平台上无法保证确定宽度的缺点。

decltype

用于编译时推断类型。此外参与函数声明的另一种语法:指定返回auto,同时decltype引导trailing-return-type指定实际应该返回类型。decltype的操作数也不被求值。

nullptr

字面量nullptr是具有std::nullptr_t类型的右值,是空指针常量。C++98/03中表示空指针常量的NULL或0都会在重载中引起混淆,而纯库的解决方案在这里也遇到困难,所以有必要加入新的关键字来专门表示空指针。

noexcept

实践表明动态异常规范会影响运行时性能。新增的noexcept表示静态异常规范,只指定函数(模版)是否有异常抛出,这里noexcept即noexcept(true),表示没有异常抛出。除了异常规范,noexcept可以作用于一个表达式来判断是否有异常,这对于模版代码非常有用。

static_assert

用于编译时的静态断言:若指定的表达式为false则编译失败。

auto

C++11标准和C++98/03标准的auto是不同的。C++98/03标准中,auto表示自动储存类型[6];C++11标准中,auto表示由编译器静态判断其应有的类型[4]


网友的其他文章“c++关键字详解(volatile, mutable, explicit, dynamic_ cast(expression))等”,链接http://blog.csdn.net/huxin1/article/details/3855055,对部分特殊关键字讲解的比较详细,文章如下:

1 >   
  在一个线程中:  
 >  return;    
   
  在另外一个线程中,要终止上面的线程循环:  
 >  while(   bStop   );   //等待上面的线程终止,如果bStop不使用volatile申明,那么这个循环将是一个死循环,因为bStop已经读取到了寄存器中,寄存器中bStop的值永远不会变成FALSE,加上volatile,程序在执行时,每次均从内存中读出bStop的值,就不会死循环了。
这个关键字是用来设定某个对象的存储位置在内存中,而不是寄存器中。因为一般的对象编译器可能会将其的拷贝放在寄存器中用以加快指令的执行速度,例如下段代码中:  
  ...  
 >  for(;   nMyCounter<100;nMyCounter++)  
  {  
  ...  
  }  
  ...  
  在此段代码中,nMyCounter的拷贝可能存放到某个寄存器中(循环中,对nMyCounter的测试及操作总是对此寄存器中的值进行),但是另外有又段代码执行了这样的操作:nMyCounter   -=   1;这个操作中,对nMyCounter的改变是对内存中的nMyCounter进行操作,于是出现了这样一个现象:nMyCounter的改变不是同步的 

                                                                                           
2 >   return biggest;
}
在c++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。
类的静态成员变量必须在声明它的文件范围内进行初始化才能使用,private类型的也不例外。如,              
float>

4 >char store_char[maxarray];  //c++中合法,c中不合法

1.如果const位于星号左侧,则const用来修饰指针所指向的变量,
       即指针指向的为不可变的.
2.如果const位于星号右侧,const就是修饰指针本身,即指针本身是
不可变的.


7>或者:

i =>B * b = reinterpret_cast<B *>(a);
'reinterpret_cast'就像传统的类型转换一样对待所有指针的类型转换。

2>Derived *b = static_cast<Derived *>(a);
'static_cast'除了操作类型指针,也能用于执行类型定义的显式的转换,以及基础类型之间的标准转换:

代码:
double>int    i = static_cast<int>(d);

3>Base* b2 = new Base;

Derived*>Derived* d2 = dynamic_cast<Derived *>(b2);          // fails: returns 'NULL'

如果一个引用类型执行了类型转换并且这个转换是不可能的,一个bad_cast的异常类型被抛出:
代码:
class Base {>Base* b2 = new Base;

Derived>Derived d2 = dynamic_cast<Derived &*>(b2);          // fails: exception thrown

4>

C *b =>==  dynamic_cast .vs. static_cast
==

class B { ... };
class D :>   D* pd2 = static_cast<D*>(pb);
}

If>

If>==  static_cast .vs. reinterpret_cast
==

   >

    上面的例子中, 我们将一个变量从>    double d=reinterpret_cast<double & > (n);

    这次, 结果有所不同. 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析.


0 0
原创粉丝点击