【发布时间】:2018-11-02 08:44:29
【问题描述】:
我有一个val.h 源代码文件,其中包含具有内部链接的全局变量和返回其地址的内联函数:
// val.h
#pragma once
static int val;
inline int* get_val()
{
return &val;
}
然后这个标题包含在两个不同的翻译单元中。如果我在这两个单元中调用&val,我会得到两个不同的地址,这没关系,因为val 有一个内部链接并且每个翻译单元都有自己的val。但是如果我在这两个单元中都调用get_val(),我会得到两个相等的地址。
这种行为是否受到标准的保证,我们是否总是会从任何翻译单元获得 get_val() 调用返回的相同值?
如果编译器决定进行真正的内联怎么办,即只是将每个翻译单元中的get_val() 调用替换为&val 语句。在这种情况下,我们会为每个翻译单元获得不同的地址吗?
【问题讨论】:
标签: c++ global-variables inline-functions