考虑以下C ++结构type_no
的代码:
#include <iostream>
template <int i>
struct type_no {
static const int value = 0;
};
template<>
struct type_no<1> {
static const bool value = 10;
};
template<>
struct type_no<2> {
static const bool value = 20;
};
int main() {
std::cout << type_no<0>::value << std::endl;
std::cout << type_no<1>::value << std::endl;
std::cout << type_no<2>::value << std::endl;
}
我认为运行上面的代码应该产生:
0
10
20
但是在使用g++ -std=c++14 code.cc -o code
编译上述代码后,运行./code
会产生:
0
1
1
操作系统为Ubuntu 16.04.2 LTS (GNU/Linux 4.14.12-x86_64-linode92 x86_64)
。 g++ --version
的结果是g++ (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04) 6.3.0 20170519
。
答案 0 :(得分:0)
标准有两个相关部分:
<强> 6.9.1 强> bool类型的值为
true
或false
。7.14布尔转换[conv.bool]
1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为abool
类型的prvalue。零值,空指针值或空成员指针值将转换为false
; 任何其他值都将转换为true
。对于直接初始化(11.6),类型为std::nullptr_t
的prvalue可以 转换为bool
类型的prvalue;结果值为false
。