【发布时间】:2010-12-07 17:09:02
【问题描述】:
在 C++ 编程世界中不时出现的一个常见问题是编译时确定字节顺序。通常这是通过几乎不可移植的#ifdefs 来完成的。但是 C++11 constexpr 关键字以及模板特化是否为我们提供了更好的解决方案?
在 C++11 中执行以下操作是否合法:
constexpr bool little_endian()
{
const static unsigned num = 0xAABBCCDD;
return reinterpret_cast<const unsigned char*> (&num)[0] == 0xDD;
}
然后为两种字节序类型专门化一个模板:
template <bool LittleEndian>
struct Foo
{
// .... specialization for little endian
};
template <>
struct Foo<false>
{
// .... specialization for big endian
};
然后做:
Foo<little_endian()>::do_something();
【问题讨论】:
标签: c++ c++11 endianness