C++11新特性 Chapter1

本文介绍了C++11中关于兼容性的新特性,包括预定义宏、_Pragma操作符、静态断言、noexcept、友元类的扩展语法、final与override的使用,以及模板的默认类型参数和外部模板等,帮助读者理解C++11在兼容性和效率上的提升。
摘要由CSDN通过智能技术生成

第一章 兼容

预处理操作:文件包含、宏、条件编译

1.1 预定义宏__func__

预定义宏__func__返回所在函数的名字const char*

const char* hello()
{
    return __func__;
}

__FILE____LINE____TIME____DATA__

int main()
{
    cout << hello() << endl;
    cout << __FILE__ << endl;  //返回所在文件的名字
    cout << __LINE__ << endl;  //返回当前行号
    cout << __TIME__ << endl;  //返回当前编译时间 
    cout << __DATE__ << endl;  //返回编译日期
    return 0;
}

在这里插入图片描述

1.2 #pragma

#pragma once 放在头文件最前面,表示只编译一次,防止头文件被多次包含,等价于下面的#ifdef那一系列。

C++11中增加了操作符_Pragma {字符串字面值} _Pragma {"once"}相比预处理指令,操作符可以放在宏中。更灵活一些吧,具体用到再说!

#pragma pack (n)用来改变编译器内存对齐方式,这个就涉及到struct内变量如何对齐了。比较复杂,这里先简单引入一下。

默认pack(8)也即是八字节对齐,可以是1, 2, 4, 8, 16, …

struct 对齐规则:

  • 整个内存大小是最大成员类型的整数倍
  • 每个成员开始时都是该成员类型大小的整数倍
struct a
{
    int a1;  // 4
    char a2; // 5
    char a3; // 6
}; // 8
struct b
{
    char b1; // 1
    int b2;  // 5
    char b3; // 9 
}; // 12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值