语言新特性
.__cplusplus 宏
.对齐支持
.通用属性
.原子操作
.auto类型推导
.强类型枚举
.复制及再抛出异常
.常量表达式
.decltype
.函数的默认模板参数
.显示默认和删除的函数(默认的控制)
.委托构造函数
.并行动态初始化和析构
.显示转换操作符
.扩展的friend语法
.扩展整型
.外部模板
.一般化的SFINAE规则
.统一的初始化语法和语义
.非受限联合体
.用户定义的字面量
.变长模板
.类成员初始化
.继承构造函数
. 初始化列表
.lambda函数
.局部类型用作模板参数
.long long 整型
.内存模型
.移动语义
.内联名字空间
.防止类型收窄
.指针空值
.POD
.基于范围的for语句
.原生字符串面值
.右值引用
.静态断言
.追踪返回类型语法
.模板别名
.线程本地的存储
.Unicode
1.__func__预定义标识符
C99标准中的__func__预定义标识符。
作用:基本功能就是返回所在函数的名字。
const char* hello(){
return __func__;
}
//return:hello
const char* hello(){
static const char* __func__ = "hello";
return __func__;
}
__func__预定义标识符 对于轻量级的调试代码具有十分重要的作用
C++11甚至允许其使用在类或结构体中
在结构体的构造函数中,初始化成员列表使用__func__预定义标识符是可行的,其效果跟在函数中使用一样
不过将__func__标识符作为含参数的默认值是不允许的,这是由于在参数声明时,__func__还未被定义
2._Pragma操作符
在C/C++标准中#pragma是一条预处理的指令(preprocessor directive)
#pragma 是用来向编译器传达语言标准以外的一些信息
#pragm once 那么该指令会指示编译器(如果编译器支持),该头文件应该只被编译一次。
在C++11中,标准定义了与预处理指令#pragma功能相同的操作符_Pragma
_Pragma (字符串字面量)
3. long long 整型
long long 被纳入C++11标准
long long 和unsigned long long 两种类型
至少保证有64位
LLONG_MIX
LLONG_MAX
ULLONG_MIN
4.静态断言
在C++中,程序员也可以定义宏NDEBUG类禁用assert宏
类似的实现
#ifdef NDEBUG
#define assert(expr) (static_cast<void>(0))
#else
...
#endif
#ifndef _COMPLEX_H
#error "111111"
#endif
一旦定义了NDEBUG宏,assert宏将被展开为一条无意义的C语句(通常会被编译器优化掉)
静态断言与static_assert
断言 assert 宏只有在程序运行的时候才起作用 ,而#error只在编译器预处理时候才能起作用
static_assert(bool表达式,"错误信息")
5.noexcept 修饰符与noexcept 操作符
void excpt_func() throw (int,double) {...}
定义了一个动态异常声明throw(int,double),该声明指出excpt_func可能抛出异常的类型。
事实上该特性很少被使用,因此在C++11中弃用,而表示函数不会抛出异常的动态异常声明
throw()也被noexcept异常声明所取代
noexcept 形如其名,表示其修饰的函数不会抛出异常。在C++11中如果noexcept修饰的函数
抛出了异常,编译器可以选择直接调用std::terminate()函数来终止程序的运行
从语法上讲,noexcept修饰符有两种形式,一种是简单地在函数声明后加上noexcept关键字
void excpt_func() noexcept;
另外一种则可以接受一个常量表达式作为参数
void excpt_func() noexcept(常量表达式);
常量表达式的结果会被转换成一个bool类型的值。值为true,表示函数不会抛出异常,反之则抛出异常
noexcept 作为一个操作符时候,通常用于模板
template <class T>
void fun() noexcept(noexcept(T())){}
虽然noexcept修饰符的函数通过std::terminate的调用来接受程序的执行可能会代来很多问题
比如无法保证对象的析构函数正常调用,无法保证栈的自动释放等
但是很多时候“暴力”的终止整个程序确实是简单有效的方法。
C++11标准中让类的析构函数默认也是noexcept()
C++11学习笔记01
最新推荐文章于 2024-04-16 10:16:13 发布