1

我在这里阅读了一个名为Injected 类名的奇怪 C++ 功能 的奇怪 C++ 功能。

我尝试遵循简单的程序

#include <iostream>
class test
{
    int s{3};
    public:
    int get_s()
    { return s; }
};
int main() {
    class test::test s;  // struct test::test s; also allowed. Why???
    std::cout<<s.get_s();
}

如果我在 main() 程序的第一行用struct替换class关键字,仍然可以编译并运行良好。在此处查看现场演示。为什么?我不应该得到编译器错误吗?为什么它编译得很好?

4

4 回答 4

5

我相信相关的诗句在 7.1.6.3/3 中(突出显示我的,这里引用自 C++17 标准的草案):

因此,在任何详细的类型说明符中,enum关键字应用于指代枚举(7.2),union 类键应用于指代联合(第 9 条),classstruct 应为用于引用使用classor struct class-key声明的类(第 9 条) 。

因此,任何一个关键字都可以用来规定注入的类名存在的范围,而不管是用来声明/定义test的。

于 2015-07-22T09:50:27.283 回答
1

struct 和 class 在 C++ 中几乎相同。唯一的区别是,结构的成员默认是公共的,而类的成员默认是私有的。

在此处查看完整答案:C/C++ Struct vs Class

于 2015-07-22T09:40:28.707 回答
-1

class test s; 或者 struct test s;也可以。

C++ 中的类和结构实际上是一回事。

区别在于:

struct A{
};

就好像

class A{
public:
};

class B{
};

就好像

struct B{
private:
};

允许您使用struct前缀是为了与 C 兼容,我猜它延伸到class因为“为什么不呢?”。

于 2015-07-22T09:42:01.537 回答
-1

对不起,也许我误解了你的帖子,但 C++ 中的类和结构之间没有太大区别。我知道的主要区别是,默认情况下,结构的所有字段都是公共的。

有一篇文章谈论 struct 和 class 之间的区别:C++ 中 struct 和 class 的区别是什么?

于 2015-07-22T09:44:12.193 回答