Joã*_*nso 6 c++ linkage language-lawyer c++17
[basic.link]/6(我的强调):
在块作用域中声明的函数的名称和由块作用域extern声明声明的变量的名称具有链接.
...
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
}
}
Run Code Online (Sandbox Code Playgroud)
[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
Run Code Online (Sandbox Code Playgroud)
由于extern上面用粗体字符突出显示的段落[basic.link]/6中的第一句话,箭头指向的说明符是没有必要的.我是否遗漏了一些东西?
extern在那里强调各自的评论,指出extern在某些情况下没有效果(由于该段落中概述的规则)。
在第一个示例中,尽管已声明,但仍f具有内部链接,因为它首先是在命名空间范围内声明的。externstatic
在第二个示例中,extern对声明没有影响,因为q在没有它的情况下也在命名空间范围内声明(并且X::q优先于::q)。
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |