gpt4 book ai didi

c++ - 编译器如何知道其他 .cpp 文件如何使用静态常量成员?

转载 作者:行者123 更新时间:2023-11-30 05:22:11 25 4
gpt4 key购买 nike

有人可以从最权威的 ISO C++ 常见问题解答中向我解释这个例子吗?代码是这样的:

// Fred.h
class Fred {
public:
static const int maximum = 42;
// ...
};

// Fred.cpp
#include "Fred.h"
const int Fred::maximum;
// ...

我无法得到的声明是:

If you ever take the address of Fred::maximum, such as passing it by reference or explicitly saying &Fred::maximum, the compiler will make sure it has a unique address. If not, Fred::maximum won’t even take up space in your process’s static data area.

编译器单独处理 .cpp 文件,并且不知道其他文件如何处理当前正在处理的文件中定义的数据。那么,编译器如何决定是否应分配唯一地址?

原始项目在这里:https://isocpp.org/wiki/faq/ctors#static-const-with-initializers

最佳答案

编译器不决定任何事情。对于未定义 static 类成员的翻译单元,编译器生成的目标模块包含对符号的未解析引用。

当所有目标模块链接在一起时,链接器负责完成工作,并将所有未解析的引用从引用静态符号的翻译单元解析到定义了符号的单独翻译单元。

关于c++ - 编译器如何知道其他 .cpp 文件如何使用静态常量成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782414/

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