gpt4 book ai didi

c++ - alignof运算符有什么用?

转载 作者:行者123 更新时间:2023-11-28 02:22:03 26 4
gpt4 key购买 nike

我想知道在 C++14 中哪里可以使用 alignof 运算符

#include <iostream>
struct Empty {};
struct Foo {
int f2;
float f1;
char c;
};

int main()
{
std::cout << "alignment of empty class: " << alignof(int*) << '\n';
std::cout << "sizeof of pointer : " << sizeof(Foo) <<"\n" ;
std::cout << "alignment of char : " << alignof(Foo) << '\n'
std::cout << "sizeof of Foo : " << sizeof(int*) << '\n' ;
}

我想知道alignof在上面的程序中做了什么?

最佳答案

一些平台要么不支持读取未对齐的数据,要么读取速度非常慢。您可以将 alignofalignas 一起使用来创建适合存储除 char 以外的其他类型的字符缓冲区(这就是 std::aligned_storage 确实如此)。例如……

template<class T, std::size_t N>
class static_vector
{
// properly aligned uninitialized storage for N T's
typename std::aligned_storage<sizeof(T), alignof(T)>::type data[N];
std::size_t m_size = 0;

public:
// Create an object in aligned storage
template<typename ...Args> void emplace_back(Args&&... args)
{
if( m_size >= N ) // possible error handling
throw std::bad_alloc{};
new(data+m_size) T(std::forward<Args>(args)...);
++m_size;
}

// Access an object in aligned storage
const T& operator[](std::size_t pos) const
{
return *reinterpret_cast<const T*>(data+pos);
}

// Delete objects from aligned storage
~static_vector()
{
for(std::size_t pos = 0; pos < m_size; ++pos) {
reinterpret_cast<const T*>(data+pos)->~T();
}
}
};

*taken from cppreference example

关于c++ - alignof运算符有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32058533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com