C++ 11 新关键字
auto delctype
auto 类型说明符。auto让编译器通过初始值来推算变量的类型。
显然,auto定义的变量必须有初始值。
使用auto也能在一条语句中声明多个变量。注意一条声明语句只能有一个基本数据类型。
delctype 类型说明符。从表达式的类型推断要定义的变量的类型。
delctype ()括号内可以是变量、表达式或函数返回值。
//auto delctype
#include
#include
using namespace std;
string f(){
return "hi";
}
int main(int argc, char *argv[])
{
decltype(f()) x="abc ";//并不真正调用f()
auto y=x;
decltype(x) z=y;
cout<
<
<
nullptr
C C++中NULL的定义是不一样的。
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
问:为什么C++在NULL上选择不完全兼容C?
答:根本原因和C++的重载函数有关。C++通过搜索匹配参数的机制,试图找到最佳匹配(best-match)的函数,而如果继续支持void*的隐式类型转换,则会带来语义二义性(syntax ambiguous)的问题。
// 考虑下面两个重载函数
void foo(int i);
void foo(char* p)
foo(NULL); // which is called?
现在使用nullptr关键字,就不用宏了。
constexpr
constexpr,const expression,常量表达式。是指在编译阶段就能得到计算结果的表达式。如常量与字面值之间的运算。
复杂系统编程中,很难分辨一个初始值到底是不是常量表达式。所以C++11允许将变量声明为constexpr类型,让编译器去验证。
int main()
{
const int a=1;
int b=2;
const int c=a+b;
//constexpr int d=a+b; 会报错
//constexpr int d=a+c; 会报错,c是常量但依赖于b,故不是常量表达式
constexpr int d=a+1;
// d++;会报错 constexpr定义的变量一定是一个常量,此后用法同常量
cout<<<
final
C++11新标准提供了防止类被继承的方法——在类后使用final关键字。