gpt4 book ai didi

c++ - 为什么在类对象的声明中写一个 "class"?

转载 作者:行者123 更新时间:2023-12-04 04:26:28 28 4
gpt4 key购买 nike

我通常不这样写,但我见过一个代码库几乎无处不在,例如:

class prettyClass
{
// just class stuff
};

int main()
{
class prettyClass obj; // class?
return 0;
}

最佳答案

在 C 中,结构的标签与其他标识符位于不同的命名空间中。所以除非引入别名,否则他们必须写struct T对于类型名称。在 C++ 中(其中 classstruct 具有相同的基本概念),它被制作为自动将标签作为常规标识符引入。
但是,必须考虑 C 中的一种行为。你可以有这样的事情:

struct prettyThing
{
// data
};

void prettyThing();
由于 namespace 不同,因此没有歧义。所以 C++ 保留了这种行为。还可以有:
class prettyThing
{
// members
};

void prettyThing();
没有歧义,类名被另一个标识符隐藏。它只能通过详细的类型说明符访问,即 class prettyThing .这是为什么人们可以像您看到的那样编写声明的一个实际原因。这不是学术性的,请考虑 POSIX stat and struct stat pair .
但是……除非您与最初以 C 概念编写的 C 代码交互,否则没有理由以这种方式编写新的 C++ 代码。
有人可能想知道为什么用 struct 声明的类型不保持相同。并且简单地禁止用于声明为 class 的类型.要理解这一点,最好重申并记住 class es 和 struct ures 真的意味着在 C++ 中是一样的东西(除了默认访问说明符)。以下是所有有效的 C++:
struct thing1; // forward declare

class thing1 {
// define
};

struct thing2 {
// define
};

class thing2 object;
在详细类型说明符中可以使用任一关键字,它们在标准 C++1 中完全可以互换。

1 - Microsoft ABI behaves as a bit of an oddball here, though .

关于c++ - 为什么在类对象的声明中写一个 "class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68129983/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com