首页 > 解决方案 > 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++classreferencec++17typetraits

解决方案


引用类型和类类型是不同的类型;引用类型本身不是类类型。

作为类型分类

C++ 类型系统由以下类型组成:

我不确定你的意图,你可能会申请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

居住


推荐阅读