c++ - 调用 C 标准库函数的标准 C++ 方式
问题描述
我有几个关于在 C++ 中调用 C 标准库函数的问题:
- 如果我想调用
getline()
其中声明的<stdio.h>
内容,是否总是足以包含<cstdio>
?这适用于我正在使用的编译器,我看到它包含在内<stdio.h>
,<cstdio>
但我想知道标准是否保证这一点。 - 是否保证所有 C 标准库函数都可以在 C++ 中使用?通过
getline()
上面的示例,我注意到在它下面的cppreference<cstdio>
上没有列出getline()
。 std::
对于在命名空间中可用的 C 标准库函数和类型,FILE
或者malloc()
它们通过全局命名空间访问它们是否有任何问题,或者将它们作为std::FILE
或访问它们是否更惯用std::malloc()
?
解决方案
您应该始终包含文档告诉您的内容。(通常会编写 C++ 标准库实现,以便可以通过其他包含访问函数,但当然依赖这意味着您的代码不可移植。)请注意,C 中没有标准 getline
函数。但 C++ 中有一个:
std::getline()
在 header 中定义<string>
。通常,C++ 标准不保证 C 函数在全局范围内可用,甚至是 C++ 标准库的一部分。这两种语言在多年前就开始了分歧,因此 C++ 在某种意义上是 C 的超集(包括库)的想法是一个神话。
参考:https ://en.cppreference.com/w/cpp/string/basic_string/getline
推荐阅读
- c# - 如何在打印预览 UI 中显示多个页面并在 UWP 应用程序中打印所有页面?
- vue.js - 如何使用 vuejs 将从一个 apirest 获得的信息传递给另一个组件?
- java - 如何在不刷新的情况下关闭 BufferedWriter?
- javascript - React 中嵌套获取请求的问题
- botframework - 网络聊天:头像首字母和图像未显示
- ios - UINavigationBarAppearance 在 iOS 13 上的控制器上第一次没有布局
- java - 使用java在word文档中添加图像时无法读取输入文件
- python - 在条件中询问密钥是否存在以及在 python 中是否为真
- android - 如何在firebase实时数据库中删除child的特定孩子?
- node.js - 在 Angular NativeScript 中哪里可以找到 app.js 文件?