std::is_class 在引用 class 上是错误的
std::is_class is false on a reference class
当我在参考上测试它时,为什么 std::is_class
是 false
?
int main() {
struct foo_struct {
int i1;
int i2;
};
std::cout << std::boolalpha << std::is_class<foo_struct>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<foo_struct&>::value << std::endl; // falae
}
引用类型和class类型是不同的类型;引用类型本身不是 class 类型。
The C++ type system consists of the following types:
...
compound types (see also std::is_compound):
reference types (see also std::is_reference):
lvalue reference types (see also std::is_lvalue_reference):
rvalue reference types (see also std::is_rvalue_reference):
...
-
non-union types (see also std::is_class);
union types (see also std::is_union).
我不确定你的意图,你可以在类型上应用 std::remove_reference
,它为非引用类型提供类型本身。因此您可以在引用或非引用类型的模板中使用它。
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct>>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct&>>::value << std::endl; // true
当我在参考上测试它时,为什么 std::is_class
是 false
?
int main() {
struct foo_struct {
int i1;
int i2;
};
std::cout << std::boolalpha << std::is_class<foo_struct>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<foo_struct&>::value << std::endl; // falae
}
引用类型和class类型是不同的类型;引用类型本身不是 class 类型。
The C++ type system consists of the following types:
...
compound types (see also std::is_compound):
reference types (see also std::is_reference):
lvalue reference types (see also std::is_lvalue_reference):
rvalue reference types (see also std::is_rvalue_reference):
...
non-union types (see also std::is_class);
union types (see also std::is_union).
我不确定你的意图,你可以在类型上应用 std::remove_reference
,它为非引用类型提供类型本身。因此您可以在引用或非引用类型的模板中使用它。
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct>>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct&>>::value << std::endl; // true