我已经看到,为了检查类型 T
是否是我可以使用的类:
bool isClass = std::is_class<T>::value;
它对类和结构都返回 true。我知道在 C++ 中它们几乎是一回事,但我想知道为什么它们在类型特征上没有区别。检查这个差异总是没用,还是有更多我不明白的原因?
最佳答案
It returns true for both classes and structs. I know that in C++ they are almost the same thing, but I'd like to know why there's not a distinction between them in the type trait.
不幸的是,这是 C++ 中的一个常见误解。有时它来自基本的误解,但有时它来自英语的歧义。它可能来自不准确的编译器诊断、写得不好的书籍、不正确的 SO 答案……
你可能读过这样的文章:
“除了成员和基的默认可见性之外,结构和类在 C++ 中没有区别。”
这段话可能会被误解,因为在使用“没有区别”之类的短语时,很难区分 identity 和 equality 的概念。
事实上,C++ 自 1985 年以来就没有结构体。它只有类。
The kind of types that you declare with the keyword class
and the keyword struct
are classes .时期。关键字 struct
以及使用该关键字定义类时默认的可见性规则,只是为了与 C 向后兼容而保留……但这是语法问题。它不会使结果类型实际上是不同的类型。
类型特征没有区别,因为实际上没有一个可做的。
关于c++ - 为什么没有 std::is_struct 类型特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32719880/