C++11保证稳定性和兼容性(一):保持与C99兼容
2016-03-09 10:57
260 查看
为保证C++的稳定性及兼容性,C++11共进行了17处改动,接下来的几篇博客会一一介绍。
C++11将下面C99特性的支持都纳入了新标准中
1,C99中的预定义宏
2,__func__预定义标识符
3,_Pragma操作符
4,不定参数宏定义以及__VA_ARGS__
5,宽窄字符串连接
1.1,C++11中与C99兼容的宏
1.2,__func__预定义标识符
1,该标识符基本功能是返回所在函数的名字,事实上,按照标准定义,编译器会隐式的在函数的定义之后定义该标识符
如:const char* hello(){return __func__;}
实际定义等同于:
const char* hello()
{
static const char* __func__ = "hello";
return __func__;
}
2,C++11还允许该标识符可以使用在类或者结构体中
如:
struct TestStruct
{
Test Struct() : name(__func__){}
const char* name;
};
效果与在函数中使用一样,将那么初始化为"TestStruct"
3,该标识符不能作为函数参数的默认值
如:void Func(string func_name = __func__){};//无法编译通过,原因:参数声明时,__func__还未被定义
1.3,_Pragma操作符
C++11中定义了_Pragma操作符与预处理指令#pragma功能相同
如:_Pragma("once");同#pragma once效果
1.4,不定参数宏定义以及__VA_ARGS__
变长参数的宏定义是指宏定义中参数列表的最后一个参数为省略号,而__VA_ARGS__可以将宏定义实现部分替换省略号所代表的字符串
如:#define PR(...) printf(__VA_ARGS__)
1.5,宽窄字符串连接
之前的标准中,将窄字符串(char)转换成宽字符串(wchar_t)是未定义的行为,而在C++11标准中,窄字符串和宽字符串进行连接时,支持C++11的编译器会将窄字符串转换成宽字符串,然后在进行连接
C++11将下面C99特性的支持都纳入了新标准中
1,C99中的预定义宏
2,__func__预定义标识符
3,_Pragma操作符
4,不定参数宏定义以及__VA_ARGS__
5,宽窄字符串连接
1.1,C++11中与C99兼容的宏
1.2,__func__预定义标识符
1,该标识符基本功能是返回所在函数的名字,事实上,按照标准定义,编译器会隐式的在函数的定义之后定义该标识符
如:const char* hello(){return __func__;}
实际定义等同于:
const char* hello()
{
static const char* __func__ = "hello";
return __func__;
}
2,C++11还允许该标识符可以使用在类或者结构体中
如:
struct TestStruct
{
Test Struct() : name(__func__){}
const char* name;
};
效果与在函数中使用一样,将那么初始化为"TestStruct"
3,该标识符不能作为函数参数的默认值
如:void Func(string func_name = __func__){};//无法编译通过,原因:参数声明时,__func__还未被定义
1.3,_Pragma操作符
C++11中定义了_Pragma操作符与预处理指令#pragma功能相同
如:_Pragma("once");同#pragma once效果
1.4,不定参数宏定义以及__VA_ARGS__
变长参数的宏定义是指宏定义中参数列表的最后一个参数为省略号,而__VA_ARGS__可以将宏定义实现部分替换省略号所代表的字符串
如:#define PR(...) printf(__VA_ARGS__)
1.5,宽窄字符串连接
之前的标准中,将窄字符串(char)转换成宽字符串(wchar_t)是未定义的行为,而在C++11标准中,窄字符串和宽字符串进行连接时,支持C++11的编译器会将窄字符串转换成宽字符串,然后在进行连接
相关文章推荐
- 深入分析c++虚函数表
- C++中关于new和delete的详细介绍
- 深入解析C++编程中对设计模式中的策略模式的运用
- C++的精髓——虚函数
- c语言--指针
- 简单了解设计模式中的装饰者模式及C++版代码实现
- 单例模式
- C++ 对象或指针类型转换
- C语言中各种整型变量在不同字长机器上的字节数详细探讨
- C语言 原码--反码--补码
- 详解C++设计模式编程中策略模式的优缺点及实现
- CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)
- C++拷贝构造函数详解
- 深入理解C++的动态绑定和静态绑定
- 反向迭代器的使用
- C++ (P199—P211)多态 虚函数 抽象类
- C语言(回调函数)
- Mac上编译C++报错
- C/C++ 中的0长数组(柔性数组)
- C++中函数覆盖和使用虚函数有什么区别