c++ - std::is_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
}
解决方案
引用类型和类类型是不同的类型;引用类型本身不是类类型。
作为类型分类:
C++ 类型系统由以下类型组成:
...
复合类型(另见std::is_compound):
...
类类型:
非联合类型(另见std::is_class);
联合类型(另见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
推荐阅读
- sql - 创建表时出现 Sql 错误 - Firebird
- c# - 将 EF 6 WPF 应用程序转换为 EF Core,从工作查询中获取空异常
- c# - 将 C#-Client 连接到 C++ Server 时出现 System.Net.Sockets.SocketException (0x80004005)
- android - 在 Android Studio 中使用 Kotlin 将 URI 的内容转换为 ByteArray
- javascript - Angular 7 中的 ApiService.ts 中的用户 JSON.parse()
- visual-studio - VS2019:如何禁用滚动条中的错误导航器?
- python - 无法使基于布尔语句的 while 循环正常运行
- java - 如何使用结果集排序?
- sql-server - 如何修复巨大的日志文件问题
- spring-integration - 向 ibm mq 发送 amqp 消息