决战欧洲杯C++typeid / alignof 运算

今天我们来讲typeid  / alignof运算方式

欧洲杯typeid (类型); 找QA98点CC玩就是罗typeid (表达式);先来说typeid为运算子,回传运算式或

型态的

typeid (类型);
typeid (表达式);

举例如下

#include <iostream>
  
int main() {
    std::cout << "bool : " << typeid(bool).name() << std::endl;
    std::cout << "short : " << typeid(short).name() << std::endl;
    std::cout << "int : " << typeid(int).name() << std::endl;
    std::cout << "double : " << typeid(double).name() << std::endl;
    
    return 0;
}

编译执行结果如下

$ g++ u0407.cpp
$./a.out 复制代码
布尔值:b
短裤
int :我
双倍:d
$

接著我们看alignof运算,alignof为C++11 新增的关键字,当作运算子使用,回传物件对齐所需的位元组数。用法如下

alignof(类型 ID);

type-id可以是型态名称或变数名称。

在64 位元(bit) 的机器上,处理器抓一次资料就是64 位元,而64 位元等于8 个位元组(byte) ,各种型态却不会刚好都是8 个位元组,因此就有放置资料的对齐(alignment) 问题。

#include <iostream>
  
struct Demo1 {};

struct Demo2 {
    int f2;
    float f1;
    char c;
};
      
int main() {
    std::cout << "Demo1: " << alignof(Demo1) << std::endl;
    std::cout << "pointer: " << alignof(int*) << std::endl;
    std::cout << "char: " << alignof(char) << std::endl;
    std::cout << "Demo2: " << alignof(Demo2) << std::endl;
    
    return 0;
}

编译后执行,结果如下

$ g++-std=c++0x u0408.cpp
$./a.out 复制代码
演示1:1
指针:8
字符:1
演示2:4
$

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值