C++常用关键字(C++11更新)

来源:互联网 发布:jre源码 编辑:程序博客网 时间:2024/05/22 06:35

C++常用关键字(C++11更新) 

typeid:

获取表达式的类型,以std::type_info(类)表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即RTTI。

const std::type_info&ff=typeid(ee);//typeid:Theresult of a typeid expression is a const type_info&.

typedef:

用以给数据类型取别名。字面名义上是定义,实际只是声明——这点和C语言的说法不同。C++11中可被using新增的用法代替。

sizeof:

返回类型名或表达式具有的类型对应的大小。不能对函数使用(虽然可能有非标准扩展)。C++11新增支持直接对类的数据成员作为操作数(之前无法使用)。sizeof的操作数是不被求值的,利用这一点可以配合模版元编程测试类型正确性。

catch,throw,try:

用于异常处理try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范,但在C++11中被标记为过时(由noexcept部分取代)。

mutable:

用于类的非静态非const数据成员,表示不受到成员函数的const的限制,可以在const成员函数中使用,或改变其值。

auto:

C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为局部变量。这个关键字不常用,因为即便省略,声明的默认就是auto的。[6] 

C++11中,auto的含义改变为自动通过初值符推断声明的类型占位符。如声明auto i = 1;auto就相当于int,因为1int类型,可以推断出i的类型。也可以使用auto& i等声明,具体推导规则同模版参数类型推导。[4] 

decltype:

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

static_assert:

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

noexcept:

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

constexpr:

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

static:

C语言类似,声明静态存储期对象,或指定一个函数的名称具有内部链接。在C++还有另一个用途——用于类作用域声明,表示声明的成员是类共有的,不需要通过类的对象访问。类的静态数据成员也具有静态存储期,除非被thread_local修饰。

 

if(n==10)if(10==n)区别?哪个更好?

两者并无效率的差异。区别在于编译器的错误检查:

经常会写成if (n=10) ;如果某语言是弱语言(如C++)或者编译器检查不严格..则该语句就一定为true10=n100%是个false..因为值不能被变量赋值

 

 

0 0
原创粉丝点击