gpt4 book ai didi

c++ - 外部存储类说明符

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:37 24 4
gpt4 key购买 nike

C++ 标准的第 7.1 节提到“extern”作为存储类说明符。

N3126 - "The extern specifier can be applied only to the names of variables and functions. The extern specifier cannot be used in the declaration of class members or function parameters. For the linkage of a name declared with an extern specifier, see 3.5. [ Note: The extern keyword can also be used in explicit-instantiations and linkage-specifications, but it is not a storage-class-specifier in such contexts. —end note ]

我理解这个关键字,它在“链接规范”的上下文中使用,但我无法理解“extern”作为存储说明符的用法。

  1. 不是所有“外部”名称都具有静态存储期限吗?
  2. 如果对 1 的回答是肯定的,那么为什么要冗余? C 兼容性?

最佳答案

extern 是一个存储类说明符。这只是语言语法的一个事实。 extern 对程序的语义有很多影响,具体取决于它的使用位置。它在任何地方都没有相同的效果。它影响对象的存储持续时间和链接,还有助于确定某些声明是否也是定义。

例如:

int a; // Ex1

extern int b; // Ex2

例如,如果 Ex1Ex2 在全局范围内,那么它们都将引用具有静态存储持续时间和外部链接的对象。但是,在 C++ 中,第一个是定义(C 中的暂定定义),第二个不是。在此示例中,extern 没有更改已声明对象的存储持续时间或链接。

如果 Ex1Ex2 出现在函数体中,那么 a 将引用一个具有自动存储持续时间且没有链接但 b 将引用具有外部链接和静态存储持续时间的对象。在本例中,extern 影响了声明在链接、存储持续时间和是否为定义方面的含义。

最后,在 C++ 中,这是一个示例,其中 extern 的唯一作用是将链接从内部更改为外部。

const int c = 5; // static storage duration, internal linkage

extern const int d = 10; // static storage duration, external linkage

关于c++ - 外部存储类说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993966/

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