lzybkdx 2015-08-22 16:02 采纳率: 0%
浏览 938

关于g++中原c标准库和std的疑问

我在程序中用了原c标准库(类似于#include ),用g++编译通过,后来改的时候发现未载入相应的函数(即没用using std::exit之类的),感觉奇怪。于是编了个小程序实验一下,发现原c标准库似乎不在std中(即使用)。
问一下这是为什么,是不是编译器设置,如果是为什么要这样做?怎么改

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 14:44
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    在C++中,头文件 #include <cstdlib>(或者 #include <stdlib.h>)对应于C标准库中的 <stdlib.h> 头文件,其中定义了一些与内存管理、数值转换、随机数生成等相关的函数和宏。当你在C++程序中包含该头文件时,这些函数和宏都会进入全局命名空间,而不是 std 命名空间。


    C++标准库(如 <iostream><vector> 等)以及C++11引入的标准库组件都位于 std 命名空间中。这是为了避免全局命名空间的污染和命名冲突,将C++的标准库成员放在 std 命名空间中是一种良好的实践。


    如果你希望在C++程序中使用C标准库的函数,但又不想每次都写 std:: 前缀,你可以使用 using 声明来引入特定的标识符到当前作用域。例如,using std::exit; 可以将 exit 函数引入到当前作用域,使你可以直接使用 exit() 而无需写成 std::exit()


    以下是一个简单的示例程序,演示了如何使用C标准库函数以及如何通过 using 声明来简化调用:

    #include <cstdlib>
    #include <iostream>
    
    int main() {
        using std::exit;
        
        std::cout << "Before calling exit()..." << std::endl;
        
        exit(0);
        
        std::cout << "This line will not be executed." << std::endl;
        
        return 0;
    }
    

    请注意,根据C++标准,不鼓励在全局范围内使用 using 声明,因为它可能导致命名冲突和可读性问题。最好将 using 声明限制在最小的作用域内,以避免潜在的问题。


    总结来说,C标准库的函数和宏位于全局命名空间,而C++标准库的函数位于 std 命名空间中。你可以通过 using 声明将特定的标识符引入到作用域中,以方便使用。

    评论

报告相同问题?

悬赏问题

  • ¥15 CSS实现渐隐虚线边框
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题