alignof与noexcept(c++11)

alignof

计算机系统可能限制数据在内存的存储方式。例:
一个系统要求double值存储在编号为偶数的内存单元中,另一个系统要求起始地址为8个整数倍。运算符alignof将类型作为参数,并返回一个整数,指出要求的对齐方式。
例:对齐要求可能决定结构中信息的组织方式,如下面程序:

#include <iostream>
using namespace std;

struct things1
{
    char ch;
    int a;
    double x;
};

struct things2
{
    int a;
    double x;
    char ch;
};

int main()
{
    things1 th1;
    things2 th2;

    cout<<"char alignment:"<<alignof(char)<<endl;
    cout<<"int alignment:"<<alignof(int)<<endl;
    cout<<"double alignment:"<<alignof(double)<<endl;
    cout<<"things1 alignment:"<<alignof(things1)<<endl;
    cout<<"things2 alignment:"<<alignof(things2)<<endl;
    cout<<"things1 size:"<<sizeof(things1)<<endl;
    cout<<"things2 size:"<<sizeof(things2)<<endl;
    return 0;

}

在这里插入图片描述
两个结构对齐方式都为8,意味着结构长度是8的整数倍,这样创建结构数组时,每个元素的起始位置都是8的整数倍。每个结构的所有成员只占用13位,但结构要求占用为8的整数倍,意味着要填充一些位。每个结构中,double成员的对齐要求为8的整数倍,但在结构things1与things2中成员的排列顺序不同。导致things2需要更多内部填充,以便其边界处于正确的位置。

noexcept

关键字noexcept用于指出函数不会引发异常。它也可用作运算符,判断操作数(表达式)是否可能引发异常;如果操作数可能发生异常,则返回false否则true。例:

int hilt(int);
int halt(int)noexcept;

表达式noexcept(hilt)的结果为false,因为hilt()的声明未保证不会引发异常,但noexcept(halt)的结果为true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值