gpt4 book ai didi

c++ - 为什么他们坚持在下面的示例中使用 `extern` 说明符?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:46 27 4
gpt4 key购买 nike

[basic.link]/6 (我的重点):

The name of a function declared in block scope and the name of a variable declared by a block scope extern declaration have linkage. ...

static void f();
static int i = 0;

void g() {
extern void f(); // internal linkage
int i; // #2 i has no linkage
{
extern void f(); // internal linkage <--
extern int i; // #3 external linkage
}
}

[basic.link]/7 :
...

namespace X {
void p() {
q(); // error: q not yet declared
extern void q(); // q is a member of namespace X <--
}
void middle() {
q(); // error: q not yet declared
}
void q() { /* ... */ } // definition of X::q
}
void q() { /* ... */ } // some other, unrelated q

箭头指向的 extern 说明符不是必需的,因为段落 [basic.link]/6 中的第一句话在上面以粗体字符突出显示。还是我遗漏了什么?

最佳答案

extern 用于强调各自的注释,指出 extern 在某些情况下无效(由于该段中概述的规则)。

在第一个示例中,f 具有内部链接尽管被声明为extern,因为它首先被声明为static 在命名空间范围内。

在第二个例子中,extern 对声明没有影响,因为 q 也在没有它的命名空间范围内声明(和 X::q 优先于 ::q)。

关于c++ - 为什么他们坚持在下面的示例中使用 `extern` 说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376853/

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