为什么C ++命名空间内的定义在命名空间外起作用?

tonmoy71

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

#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;
}

在这里,我从未使用命名空间foo编写过代码。但是仍然无法编译此代码,因为在尝试声明int a时,它会受到先前定义的a的干扰。但是为什么要这样呢?

一切都在流动

“ ...当试图声明int a时,它会受到先前定义的a的干扰。但是为什么要这样呢?”

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

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

namespace foo {
    #define a x*2

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么C ++名称空间内的定义在名称空间外起作用?

来自分类Dev

使用XSD验证混合命名空间的XML-为什么不起作用?

来自分类Dev

ServiceContract 对命名空间的定义如何(为什么)影响功能

来自分类Dev

Clojure使用什么命名空间定义

来自分类Dev

C ++命名空间声明和定义

来自分类Dev

C++ 未定义的命名空间

来自分类Dev

什么是命名空间污染?

来自分类Dev

C ++重新定义变量,全局命名空间被污染,我不知道为什么

来自分类Dev

为什么此命名空间路由失败?

来自分类Dev

C ++“命名空间范围”

来自分类Dev

C++:使用命名空间,全局变量不起作用

来自分类Dev

XML中命名空间根节点的意义是什么?在哪里定义这样的命名空间?

来自分类Dev

:path参数在命名空间内的浅路由不起作用

来自分类Dev

什么是C#中UploadedFile的命名空间

来自分类Dev

为什么默认情况下,全局命名空间中没有C ++ 14标准定义的文字?

来自分类Dev

为什么不允许在全局命名空间中阻止作用域?

来自分类Dev

使用命名空间C ++的未定义引用

来自分类Dev

如何避免在C#命名空间中定义的多余枚举?

来自分类Dev

为什么ADL无法与在命名空间之外定义的函数一起使用?

来自分类Dev

为什么ADL无法与在命名空间之外定义的函数一起使用?

来自分类Dev

Python与C ++中的命名空间

来自分类Dev

C ++中的命名空间重构

来自分类Dev

XDocument命名空间C#

来自分类Dev

C ++命名空间与iOS框架

来自分类Dev

C ++命名空间和类

来自分类Dev

类命名空间隐藏的C#引用命名空间

来自分类Dev

为什么在使用命名空间指令时没有命名空间用作函数?

来自分类Dev

命名空间内的 UsersController

来自分类Dev

为什么这是对命名空间的不正确使用?

Related 相关文章

  1. 1

    为什么C ++名称空间内的定义在名称空间外起作用?

  2. 2

    使用XSD验证混合命名空间的XML-为什么不起作用?

  3. 3

    ServiceContract 对命名空间的定义如何(为什么)影响功能

  4. 4

    Clojure使用什么命名空间定义

  5. 5

    C ++命名空间声明和定义

  6. 6

    C++ 未定义的命名空间

  7. 7

    什么是命名空间污染?

  8. 8

    C ++重新定义变量,全局命名空间被污染,我不知道为什么

  9. 9

    为什么此命名空间路由失败?

  10. 10

    C ++“命名空间范围”

  11. 11

    C++:使用命名空间,全局变量不起作用

  12. 12

    XML中命名空间根节点的意义是什么?在哪里定义这样的命名空间?

  13. 13

    :path参数在命名空间内的浅路由不起作用

  14. 14

    什么是C#中UploadedFile的命名空间

  15. 15

    为什么默认情况下,全局命名空间中没有C ++ 14标准定义的文字?

  16. 16

    为什么不允许在全局命名空间中阻止作用域?

  17. 17

    使用命名空间C ++的未定义引用

  18. 18

    如何避免在C#命名空间中定义的多余枚举?

  19. 19

    为什么ADL无法与在命名空间之外定义的函数一起使用?

  20. 20

    为什么ADL无法与在命名空间之外定义的函数一起使用?

  21. 21

    Python与C ++中的命名空间

  22. 22

    C ++中的命名空间重构

  23. 23

    XDocument命名空间C#

  24. 24

    C ++命名空间与iOS框架

  25. 25

    C ++命名空间和类

  26. 26

    类命名空间隐藏的C#引用命名空间

  27. 27

    为什么在使用命名空间指令时没有命名空间用作函数?

  28. 28

    命名空间内的 UsersController

  29. 29

    为什么这是对命名空间的不正确使用?

热门标签

归档