相关疑难解决方法(0)

为什么"使用命名空间std"被认为是不好的做法?

我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::coutstd::cin直接代替.

为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?

c++ namespaces using-directives std c++-faq

2486
推荐指数
36
解决办法
78万
查看次数

为什么我的包含防护不能阻止递归包含和多个符号定义?

关于包括警卫的两个常见问题:

  1. 第一个问题:

    为什么不包括保护我的头文件不受相互的,递归包含的警卫?我不断收到有关不存在的符号的错误,这些符号显然存在,甚至每次我写下类似的东西时都会出现更奇怪的语法错误:

    "啊"

    #ifndef A_H
    #define A_H
    
    #include "b.h"
    
    ...
    
    #endif // A_H
    
    Run Code Online (Sandbox Code Playgroud)

    "BH"

    #ifndef B_H
    #define B_H
    
    #include "a.h"
    
    ...
    
    #endif // B_H
    
    Run Code Online (Sandbox Code Playgroud)

    "的main.cpp"

    #include "a.h"
    int main()
    {
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    为什么我会收到编译"main.cpp"的错误?我需要做些什么来解决我的问题?


  1. 第二个问题:

    为什么不包括防止多个定义的警卫?例如,当我的项目包含两个包含相同标题的文件时,链接器有时会抱怨多次定义某个符号.例如:

    "header.h"

    #ifndef HEADER_H
    #define HEADER_H
    
    int f()
    {
        return 0;
    }
    
    #endif // HEADER_H
    
    Run Code Online (Sandbox Code Playgroud)

    "source1.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    "source2.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    为什么会这样?我需要做些什么来解决我的问题?

c++ c++-faq include-guards header-files

70
推荐指数
1
解决办法
2万
查看次数