C++关键字列表及部分解析
这一部分从百度百科找来的,链接:http://b.baidu.com/view/3111818.htm
ISO C++98/03 关键字
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
constexpr
char16_t 和 char32_t
decltype
nullptr
noexcept
static_assert
auto
网友的其他文章“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, 没有进行必要的分析.