c++ - 为什么没有 std::is_struct 类型特征?

标签 c++ c++11 typetraits

我已经看到,为了检查类型 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++ 中没有区别。”

这段话可能会被误解,因为在使用“没有区别”之类的短语时,很难区分 identityequality 的概念。

事实上,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/

相关文章:

c++ - 如何找到对象是由哪些类型组成的?

c++ - 此代码合法/可移植吗?访问结构之外的数据

c++ - 继承和2种接口(interface)类型

c++ - 如何在 C++ 中使共享内存线程安全的容器

c++ - 父子进程的c变量值

C++11 constexpr 过时的模板元编程?

C++:右值引用内存

c++ - 试图访问一个类的私有(private)成员以解决重载是否是不正确的?

c++ - 为什么带有一个元素的 braced-init-list 类型会切换为元素本身的类型?

c# - Windows Phone 8 和读/写文件