交换课程& C ++中的struct关键字

时间:2015-07-22 09:33:10

标签: c++ injected-class-name

我正在阅读一个名为注入类名 here的奇怪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 关键字仍然编译&amp;运行正常。查看实时演示here。为什么?难道我不会遇到编译错误吗?为什么编译好?

4 个答案:

答案 0 :(得分:5)

我相信相关的经文是在7.1.6.3/3中(突出我的,这里引用了C ++ 17标准草案):

  

因此,在任何 elaborated-type-specifier 中,enum关键字应用于引用枚举(7.2),union 类 - key 用于表示联合(第9条),而 classstruct class-key 应用于引用使用classstruct 类密钥 声明的类(第9条)。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

class test s; 要么 struct test s;也有效。

C ++中的类和结构实际上是相同的。

区别在于:

struct A{
};

就像

class A{
public:
};

class B{
};

就像

struct B{
private:
};

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

答案 3 :(得分:-1)

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

有一篇文章谈论结构和类之间的差异: What are the differences between struct and class in C++?