c++ - 调用C标准库函数的标准C++方式

标签 c++ c++11 c++-standard-library

我有几个关于在C++中调用C标准库函数的问题:

  1. 如果我想打电话 getline()<stdio.h> 中声明是否总是包含 <cstdio> 就足够了? ?这适用于我正在使用的编译器,我看到它包括 <stdio.h><cstdio>但我想知道标准是否保证这一点。
  2. 是否保证所有 C 标准库函数都可以在 C++ 中使用?随着getline()上面的例子我注意到在 cppreference 上在 <cstdio> 下它没有列出 getline() .
  3. 对于 std:: 中可用的 C 标准库函数和类型命名空间,如 FILEmalloc()他们通过全局命名空间访问它们有什么问题,还是以 std::FILE 访问它们更符合习惯?或 std::malloc()

最佳答案

您应该始终包含文档告诉您的内容。 (C++ 标准库实现通常会被编写成函数可以通过其他包含访问,但当然依赖这意味着您的代码不可移植。)请注意,没有标准 getline C 中的函数。但在 C++ 中有一个函数:

std::getline()

在 header 中定义 <string> .通常,C++ 标准不保证 C 函数在全局范围内可用,甚至不保证是 C++ 标准库的一部分。这两种语言多年前就开始出现分歧,因此认为 C++ 在某种意义上是 C 的超集(包括库)的想法是一个神话。

引用:https://en.cppreference.com/w/cpp/string/basic_string/getline

关于c++ - 调用C标准库函数的标准C++方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213068/

相关文章:

c++ - 初始化 C++ 线程并稍后运行

c++ - 标准 C++ 库的替代方案是什么,并通过清晰的实现来提升?

c++ - 删除 std::vector<std::string> 中与另一个给定 std::string 中的字符匹配的元素

c++ - 枚举类不明确继承

c++ - 如何在opencv2.1中使用opencv2.3头文件

c++ - 难以将 yaml 节点作为数组访问

c++ - 如何使复选框在单击时更改其状态?

c++ - 为什么 lock_guard 可以通过 unique_lock 得到一个已经锁定的互斥体?

c++ - istream_iterator 复制示例一直等待输入

c++ - 使用 QVTK 在 Qt 中进行 PCL 可视化