C ++编译器是否能够以具体方法实现(if (little_endian)
=> if(true)
或if(false)
)仅包含相关代码的方式优化此类代码需要使用type_traits
并提供两个单独的实现,以确保我的代码将被优化(即没有分支预测)?
template <typename T, bool little_endian = true> bool readValue(T& value)
{
if (m_num_bytes_parsed + sizeof(value) <= m_num_bytes_total)
{
if (little_endian)
{
m_file_stream.read((char *)(&value), sizeof(value));
}
else
{
char bytes[sizeof(T)];
m_file_stream.read((char *)(&value), sizeof(value));
std::reverse(bytes, bytes + sizeof(value));
memcpy(&value, bytes, sizeof(T));
}
m_num_bytes_parsed += sizeof(value);
return true;
}
return false;
}
答案 0 :(得分:2)
是的,每个编译器都会优化if(true)
和if(false)
,否则会折叠简单的常量表达式。
可能有一些模糊不清的编译器无法做到这一点。明确地说,当前版本的gcc,clang,intel和msvc都会根据我的知识这样做,而且我没有遇到过不这样做的编译器。