gpt4 book ai didi

c++ - 声明函数静态和后来的非静态 : is it standard?

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

我注意到一个非常奇怪的行为,如果是标准的,我会很乐意利用它(我想用它做的事情解释起来相当复杂并且与问题无关)。

行为是:

static void name();
void name() {
/* This function is now static, even if in the declaration
* there is no static keyword. Tested on GCC and VS. */
}

奇怪的是,逆运算会产生编译时错误:

void name();
static void name() {
/* Illegal */
}

那么,这是标准吗?我可以期望其他编译器以同样的方式运行吗?谢谢!

最佳答案

C++ 标准:

7.1.1/6: "A name declared in a namespace scope without a storage-class-specifier has external linkage unless it has internal linkage because of a previous declaration" [or unless it's const].

在您的第一种情况下,name 是在命名空间范围(特别是全局命名空间)中声明的。因此,第一个声明改变了第二个声明的链接。

禁止反转是因为:

7.1.1/7: "The linkages implied by successive declarations for a given entity shall agree".

因此,在您的第二个示例中,第一个声明具有外部链接(按 7.1.1/6),第二个声明具有内部链接(明确),并且这些不一致。

您还询问了 C,我想这是同一类事情。但是我这里有 C++ 的书,而你可以像我一样在线查看 C 标准草案 ;-)

关于c++ - 声明函数静态和后来的非静态 : is it standard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943847/

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