gpt4 book ai didi

c++ - 这是怎么定义的?

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:15 25 4
gpt4 key购买 nike

这个陈述是如何定义的?它不应该只是一个声明,因为在我们定义 struct date 类型的对象之前它不会分配任何内存吗?

struct Date { int d , m , y ; };

我正在阅读 Bjarne Stroustrup 的这本名为“C++ 编程语言”的书,其中(在第 4.9 节中)已经说过这是一个声明和一个定义。

最佳答案

这不是任何一种语言的声明。 C99在6.8中定义语句,C++11在6中定义语句。

在 C 中,它不是定义,它只是一个声明:C99 的 6.7/5 说:

A definition of an identifier is a declaration for that identifier that: —for an object, causes storage to be reserved for that object; —for a function, includes the function body; —for an enumeration constant or typedef name, is the (only) declaration of the identifier.

因为这三件事都不是,所以它不是标识符的定义。在 C99 语法中,它是一个struct-or-union-specifier(后跟一个分号),而后者又是一个type-specifier(后跟一个分号) -冒号),这是声明 (6.7/1) 允许的形式之一。

在 C++ 中,它是类说明符或类定义:C++11 的 9/2 说

A class-specifier is commonly referred to as a class definition.

在 C 和 C++ 中,常说“每个定义都是一个声明”,所以这可能就是为什么 Stroustrup 说它既是声明又是定义。

在 C 中这是完全正确的,因为上面的“定义”的定义。在 C++ 中,我认为 class-specifier 是声明的语法实际上并不正确,但是类定义引入了完整的类型,而类声明引入了不完整的类型。对于不完整的类型,没有什么是你不能用完整的类型做的,所以类定义“和”类声明一样好,比如 struct Date;,甚至更好。

关于c++ - 这是怎么定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331381/

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