我尝试使用constexpr实现编译时哈希算法。我下载了2013年11月的CTP,因为它支持constexpr,但这只是谎言......
#define hashCharacter(T, J) (((T >> 0x0D) | (T << 0x13)) + J)
unsigned long constexpr GetHashCompile(const char * asSource, unsigned long asValue = 0)
{
return asSource[0] == '\0'
? asValue
: GetHashCompile(asSource + 1, hashCharacter(asValue, asSource[0]));
}
int main(int a, char ** b)
{
const auto value = GetHashCompile("Hello from compiler");
printf("%d", value);
}
GetHashCompile不会在编译时生成,而不是在运行时生成。我怎么能用Visual Studio来完成上面的代码?使用GCC或CLANG完全相同的代码。
答案 0 :(得分:2)
实际上,2013年11月的CTP并未声称完全支持constexpr
,但仅声称对constexpr
提供部分支持。 features list明确表示成员函数和数组不支持constexpr
。由于字符串文字是一种数组,因此它们也不受支持:
CTP支持C ++ 11
constexpr
,但成员函数除外。 (另一个限制是不支持数组。)此外,它不支持C ++ 14的扩展constexpr
规则。