c++ 11 特性
来源:互联网 发布:mysql datetime 减法 编辑:程序博客网 时间:2024/05/29 12:29
除去语法规范等,包括标准库的接口函数定义、相关的类型、宏、常量等也都会被发布在语言标准中。相较于C89标准,C99语言标准增加一些预定义宏。C++11同样增加了对这些宏的支持。我们可以看一下表2-1。
表2-1 C++11中与C99兼容的宏
宏 名 称 功 能 描 述
__STDC_HOSTED__ 如果编译器的目标系统环境中包含完整的标准C库,那么这个宏就定义为1,否则宏的值为0
__STDC__ C编译器通常用这个宏的值来表示编译器的实现是否和C标准一致。C++11标准中这个宏是否定义以及定成什么值由编译器来决定
__STDC_VERSION__ C编译器通常用这个宏来表示所支持的C标准的版本,比如1999mmL。C++11标准中这个宏是否定义以及定成什么值将由编译器来决定
__STDC_ISO_10646__ 这个宏通常定义为一个yyyymmL格式的整数常量,例如199712L,用来表示C++编译环境符合某个版本的ISO/IEC 10646标准
使用这些宏,我们可以查验机器环境对C标准和C库的支持状况,如代码清单2-1所示。
代码清单2-1
#include <iostream>
using namespace std;
int main() {
cout << "Standard Clib: " << __STDC_HOSTED__ << endl; // Standard Clib: 1
cout << "Standard C: " << __STDC__ << endl; // Standard C: 1
// cout << "C Stardard version: " << __STDC_VERSION__ << endl;
cout << "ISO/IEC " << __STDC_ISO_10646__ << endl; // ISO/IEC 200009
}
// 编译选项:g++ -std=c++11 2-1-1.cpp
在我们的实验机上,__STDC_VERSION__这个宏没有定义(也是符合标准规定的,如表2-1所示),其余的宏都可以打印出一些常量值。
预定义宏对于多目标平台代码的编写通常具有重大意义。通过以上的宏,程序员通过使用#ifdef/#endif等预处理指令,就可使得平台相关代码只在适合于当前平台的代码上编译,从而在同一套代码中完成对多平台的支持。从这个意义上讲,平台信息相关的宏越丰富,代码的多平台支持越准确。
不过值得注意的是,与所有预定义宏相同的,如果用户重定义(#define)或#undef了预定义的宏,那么后果是“未定义”的。因此在代码编写中,程序员应该注意避免自定义宏与预定义宏同名的情况。
- C+11 新特性
- [C++]C++11新特性
- 【C++】 C++11新特性
- 【C++】了解C++11新特性
- C++:C++11新特性详解(1)
- 【C++】C++11特性:lambda和function
- [C#] 白话C#:特性
- 【C/C++】C++11新特性:std::bind
- c#:特性和属性
- c#:定义特性
- 白话C#:特性
- 12c新特性
- C函数参数特性
- C++的特性
- Objective-C 语言特性
- Objective-C新特性
- Objective-C新特性
- objective -c 特性笔记
- 数据结构基础 排序
- 子网掩码
- Makefile简易教程
- linux目录相关
- js提交后台请求的方式
- c++ 11 特性
- 造数据专用程序->供参考
- ruby 方法之间的调用
- 前端试题大综合练习(七)
- [Azure]为ARM虚拟机配置Powershell侦听(HTTP和HTTPS)
- hpu暑假训练A
- C语言 printf输出字符串数据
- 位运算
- var 和varStatus的区别