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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我已经看到,为了检查一个类型T是否是我可以使用的类:

bool isClass = std::is_class<T>::value;

它对于类和结构都返回true。我知道在C ++中它们几乎是一样的东西,但我想知道为什么它们在类型特征中没有区别?

提问于
用户回答回答于

它对于类和结构都返回true。我知道在C ++中它们几乎是一样的东西,但我想知道为什么它们在类型特征中没有区别。

不幸的是,这是C ++中常见的误解。有时它来自根本的误解,但在其他时候则来自英语的含糊不清。它可能来自不准确的编译器诊断,写得不好的书,不正确的SO答案......

你可能读过这样的内容:

“除了成员和基础的默认可见性以外,结构和类之间的C ++没有区别。”

这段话可以解释为误导,因为当使用“无差别”这样的短语时,身份平等的概念难以区分。

事实上,C ++自1985年以来就没有结构。它只有类。

使用关键字class和关键字声明的类型struct。期。struct当使用关键字定义一个类时,关键字和可见性规则是缺省的,只是为了向后兼容C ...,但这是一种语法。它不会使得到的类型实际上具有不同的类型。

类型特征没有区别,因为从字面上看不是一个可以做出的。

用户回答回答于

不可能区分类似空定义的语义差异

class C {
public:

};

struct S {

};

或类似地

class C {

};

struct S {
private:

};

除了structvs class关键字之外,没有可检测到的行为差异。

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问5 回答
  • Hyman.W

    15 粉丝0 提问3 回答
  • 找虫虫

    5 粉丝0 提问3 回答
  • uncle_light

    5 粉丝518 提问3 回答

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动