gpt4 book ai didi

c++ - 为什么 c++ 命名空间内的定义在命名空间外工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:54 26 4
gpt4 key购买 nike

如果我在命名空间中使用一些宏定义,那么它们为什么要在命名空间之外工作?例如检查此代码:

#include <bits/stdc++.h>

namespace foo {
#define a x*2

int f(int x) {
return a;
}
}

int main() {
int a = 50;
std::cout << a << endl;

std::cout << foo::f(4) << endl;

return 0;
}

这里我从来没有写过using namespace foo。但是这段代码仍然没有被编译,因为当尝试声明 int a 时,它会被之前定义的 a 干扰。但为什么会发生这种情况?

最佳答案

"... when try to declare int a, it gets disturbed by previously defined a. But why this should happen?"

#define 语句由没有命名空间(或任何其他 c++ 语言构造)概念的 c/c++ 预处理器解释。

如果你想限制定义的范围,使用#undef指令:

namespace foo {
#define a x*2

int f(int x) {
return a;
}
#undef a
// ^^^^^^^^
}

关于c++ - 为什么 c++ 命名空间内的定义在命名空间外工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677439/

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