在 C++ 中,如果两个不同的函数声明相同的静态变量会发生什么?

发布于 2024-10-01 00:33:03 字数 129 浏览 3 评论 0原文

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

別甾虛僞 2024-10-08 00:33:03

他们每个人都只看到自己的一个。无法从声明变量的 范围 之外“看到”变量。

如果,另一方面,您这样做了:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

然后 foo() 只能看到其本地 x;全局x已被它“隐藏”。但其中一项的更改不会影响另一项的价值。

They each see only their own one. A variable cannot be "seen" from outside the scope that it's declared in.

If, on the other hand, you did this:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

then foo() only sees its local x; the global x has been "hidden" by it. But changes to one don't affect the value of the other.

深海蓝天 2024-10-08 00:33:03

变量是不同的,每个函数都有自己的作用域。因此,虽然这两个变量在进程的生命周期中持续存在,但它们不会相互干扰。

The variables are distinct, each function has it's own scope. So although both variables last for the lifetime of the process, they do not interfere with each other.

寄离 2024-10-08 00:33:03

这完全没问题。实际上,编译器输出中变量的实际名称可以被认为是类似于 function_bar_x 的东西,即编译器有责任确保它们不会发生冲突。

This is perfectly fine. In practice the actual name of the variable in the output of the compiler can be thought of as something like function_bar_x, i.e. it is the responsibility of your compiler to ensure that these do not clash.

咆哮 2024-10-08 00:33:03

什么也没有发生,两个变量都有作用域并保留它们的值以在调用中调用

Nothing happen, both variables have theri scope and mantain their values to call in call

℉絮湮 2024-10-08 00:33:03

这两个静态变量是不同的。

The two static vars are different.

纵山崖 2024-10-08 00:33:03

编译器以独特的方式转换每个变量,例如示例中的 foo_xbar_x,因此它们受到的威胁不同。

不要这样做,因为一段时间后您的代码将难以阅读和维护,因为您将无法立即捕获您所指的 x 内容。

The compilator translates each variable in a unique manner, such as foo_x and bar_x in your example, so they are threated differently.

Don't do this as your code will be hard to read and maintain after some time since you will not able to catch at once of what x are you referring to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文