繁体   English   中英

为什么子类的std :: is_same为false?

[英]Why is std::is_same false for subclasses?

为什么子类B不与基类A相同?

我知道B是A但A不是B,但如果is_same在这些情况下没有返回true,那么我觉得它的使用是有限的。

在这种情况下,是否存在可以返回true的std函数?

因为is_same检查相同的类型,并且BA类型不同。 你想要的是is_base_of 这些也是元函数,而不是函数,更常被称为类型特征。

我们可以通过一个简单的程序验证这个:

struct A {};     
struct B : A {};

int main()
{
    std::cout << std::boolalpha
      << std::is_same<A, A>::value << ' '        // true
      << std::is_same<A, const A>::value << ' '  // false!
      << std::is_same<A, B>::value << ' '        // false
      << std::is_base_of<A, B>::value << ' '     // true
      << std::is_base_of<B, A>::value << ' '     // false
      << std::is_base_of<A, A>::value << ' '     // true!
      << std::endl;
}

正如TC在评论中指出的那样, is_base_of也会考虑不可访问/模糊的基础,所以也许您可能也想要考虑is_convertible ,而不是。 例:

struct B { };
struct D : private B { };

int main()
{
    std::cout << std::boolalpha
        << std::is_base_of<B, D>::value << ' '   // true
        << std::is_convertible<D*, B*>::value    // false, because private
                                                 //   inheritance
        << std::endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM