标签:而在 imp stream err col __file__ sig 应用 构造函数
【深入理解C++11】
1、很多 现实 的 编译器 都 支持 C99 标准 中的__ func__ 预定 义 标识符 功能, 其 基本 功能 就是 返回 所在 函数 的 名字。
编译器 会 隐式 地 在 函数 的 定义 之后 定义__ func__ 标识符。
const char* hello() { static const char* __func__ = "hello"; return __func__; }
__func__ 可以用于构造函数中。
#include < iostream>
using namespace std;
struct TestStruct {
TestStruct () : name(__ func__) {}
const char *name;
};
int main()
{
TestStruct ts;
cout << ts. name << endl; // TestStruct
} // 编译 选项: g++ -std= c++ 11 2- 1- 3. cpp
不过 将__ fun__ 标识符 作为 函数参数的默认值 是 不允许 的,
void FuncFail( string func_ name = __func__) {};// 无法 通过 编译
2、在 C99 标准 中, 程序员 可以 使用 变长参数的宏定义。 变长 参数 的 宏 定义 是 指在 宏 定义 中 参数 列表 的 最后 一个 参数 为 省略号, 而 预 定义 宏__ VA_ ARGS__ 则 可 以在 宏 定义 的 实现 部分 替换 省略号 所 代表 的 字符串。
#define PR(...) printf(__ VA_ ARGS__)
一个应用的例子。
#include < stdio. h>
#define LOG(...) {\
fprintf( stderr,"% s: Line %d:\ t", __FILE__, __LINE__);\
fprintf( stderr, __VA_ ARGS__);\
fprintf( stderr,"\ n");\
}
int main() {
int x = 3; // 一些 代码...
LOG(" x = %d", x); // 2- 1- 5. cpp: Line 12: x = 3
}
// 编译 选项: g++ -std= c++ 11 2- 1- 5. cpp
3、long long 是C99标准。C++11中才将其定为正式标准。事实上,在C++11以前,很多编译器也支持了long long。
long long 整型 有 两种: long long 和 unsigned long long。 在 C++ 11 中, 标准 要求 long long 整型 可以 在 不同 平台 上有 不同 的 长度, 但 至少 有 64 位。
我们 在 写 常数 字面 量 时, 可以 使用 LL 后缀( 或是 ll) 标识 一个 long long 类型 的 字面 量, 而 ULL( 或 ull、 Ull、 uLL) 表示 一个 unsigned long long 类型 的 字面 量。
long long int lli = -9000000000000000000LL;
unsigned long long int ulli = -9000000000000000000ULL;
下面 的 类型 是 等价 的: long long、 signed long long、 long long int、 signed long long int; 而 unsigned long long 和 unsigned long long int 也是 等价 的。
对于 printf 函数 来说, 输出 有 符号 的 long long 类型 变量 可以 用 符号% lld, 而无 符号 的 unsigned long long 则 可以 采用% llu。
4、__cplusplus
比如 在 C++ 03 标准 中,__ cplusplus 的 值 被 预定 为 199711L, 而在 C++ 11 标准 中, 宏__ cplusplus 被 预 定义 为 201103L。
这点 变化 可以 为 代码 所用。 比如 程序员 在想 确定 代码 是 使用 支持 C++ 11 编译器 进行 编译 时, 那么 可以 按下 面的 方法 进行 检测:
#if __cplusplus < 201103L #error "should use C++ 11 implementation" #endif Michael Wong; IBM XL译器中国开发团队. 深入理解C++11 :C++11 新特性解析与应用 (原创精品系列) (Kindle 位置 805-806). 机械工业出版社. Kindle 版本.
标签:而在 imp stream err col __file__ sig 应用 构造函数
原文地址:https://www.cnblogs.com/tekkaman/p/10207375.html