c++ - 混合功能是一种不好的做法吗与其他课程?
问题描述
我正在自学 C++,作为一种实践,我正在做一个非常基本的版本控制系统(非常非常基本)。
我正在使用 Windows 10 和 gcc (MinGW.org GCC Build-20200227-1) 9.2.0 (-std=c++17)。
我一直在检查 Microsoft 文档,因为我正在使用<windows.h>
. 我已经能够实现一些有趣的东西,所以项目已经成型;但是,我目前正在尝试创建、写入和读取文件,这是我在使用之前所做的事情<fstream>
,但我也知道这可以通过<windows.h>
函数来完成。
所以......如果我使用该函数创建文件但使用/CreateFile()
写入和读取其数据怎么办。这是一个不好的做法吗?它会导致效率问题吗?一个比另一个好?只是没关系?ifstream
ofstream
好吧,该项目仍在继续:) 我正在<windows.h>
为创建文件和<fstream>
读/写而混合,但是,我很想知道这是否被推荐,或者这是否是一种不好的做法。
谢谢。
解决方案
最佳做法是尽可能坚持使用标准 C++;也就是说,仅在需要的范围内使用特定于 Windows 的 API 调用。
您不需要调用 CreateFile(...) 来写入文件,所以不要。标准库的实现将在 Win32 API 调用方面无论如何都需要,因此不使用像 CreateFile(...) 这样的调用不会影响性能,因为您正在使用它,只是在由于实现标准库的人所做的工作,这种方式是可移植的。
在所有条件相同的情况下,尽量将您对 Win32 的使用隔离到特定的翻译单元(即 cpp 文件)中。尽可能多地使用标准 C++。您当前的项目可能永远不需要跨平台或与跨平台应用程序共享代码,但这些仍然是需要养成的好习惯。故意使东西不便携是没有用的。
推荐阅读
- android - 如何从 C++ 代码生成 arm64-v8a 64 位共享对象?
- sap-successfactors - 我们是否有可用于成功因素的 webhook/推送通知?
- .net - MVC5 VB.Net 将 Dictionary(Of String,String) 转换为 SelectList 类型
- c - 与 scanf() 或 if() 混淆
- javascript - Jest 快照未生成快照且测试失败
- java - 在eclipse中找不到带有Appium的构造函数AndroidDriver
- vba - Excel VBA - 查询表达式中的语法错误(缺少运算符)
- javascript - 在不应该出现的地方出现错误
- azure - Azure Blob 的数据集验证策略 minimumSizeMB
- discord - 在禁止/踢命令后发送消息