今天我们来讲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
$