草庐IT

ofstream_ptr

全部标签

c++ - 如何在 ofstream 上进行 fsync?

我想确保已将ofstream写入磁盘设备。这样做的可移植方式是什么(在POSIX系统上可移植)?如果我在read-only附加模式中单独open文件以获取文件描述符并调用fsync是否可以解决问题它?像这样:ofstreamout(filename);/*...writecontentintoout...*/out.close();intfd=open(filename,O_APPEND);fsync(fd);close(fd); 最佳答案 如果您能够使用Boost,请尝试使用基于file_descriptor_sink的流,例如:

c++ - 为什么要为具有非平凡析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

据我了解(至少对于c++14而言),析构函数不能是constexpr如果它不是微不足道的(隐式生成或=default)。声明constexpr有什么意义?具有非平凡析构函数的结构的构造函数?structX{inta_;constexprX(inta):a_{a}{}//constexpr~X(){};//Errordtorcannotbemarkedconstexpr//~X(){};//causeserroratydeclaration:temporaryofnon-literaltype‘X’//inaconstantexpression.};templatestructY{};i

c++ - 为什么要为具有非平凡析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

据我了解(至少对于c++14而言),析构函数不能是constexpr如果它不是微不足道的(隐式生成或=default)。声明constexpr有什么意义?具有非平凡析构函数的结构的构造函数?structX{inta_;constexprX(inta):a_{a}{}//constexpr~X(){};//Errordtorcannotbemarkedconstexpr//~X(){};//causeserroratydeclaration:temporaryofnon-literaltype‘X’//inaconstantexpression.};templatestructY{};i

c++ - 当 fail() 为真时检测无法打开 ofstream 的原因

看起来应该很简单,但我在网上搜索中没有找到。我有一个ofstream,它是open(),而fail()现在是true。我想知道打开失败的原因,比如errno我会做sys_errlist[errno]. 最佳答案 strerror函数来自可能有用。这不一定是标准的或可移植的,但它适用于我在Ubuntu机器上使用GCC:#includeusingstd::cout;#includeusingstd::ofstream;#includeusingstd::strerror;#includeintmain(){ofstreamfout("r

c++ - 当 fail() 为真时检测无法打开 ofstream 的原因

看起来应该很简单,但我在网上搜索中没有找到。我有一个ofstream,它是open(),而fail()现在是true。我想知道打开失败的原因,比如errno我会做sys_errlist[errno]. 最佳答案 strerror函数来自可能有用。这不一定是标准的或可移植的,但它适用于我在Ubuntu机器上使用GCC:#includeusingstd::cout;#includeusingstd::ofstream;#includeusingstd::strerror;#includeintmain(){ofstreamfout("r

c++ - 如何正确返回 unique_ptr 的集合

在更改我的代码以使用唯一指针后,我偶然发现了如何将对象集合返回给客户端。一般来说,我想将对象作为引用或非拥有指针传递。但如果我有一个对象集合,我不能只返回对它的引用。例如,我有一个包含对象集合的简单类,这些对象都创建一次,之后不会更改。usingObjectUPtr=std::unique_ptr;classMyClass{public:conststd::vector&GetObjectsOldStyle()const{returnmObjectsOldStyle;}conststd::vector&GetObjectsNewStyleA()const{//Idon'tliketha

c++ - 如何正确返回 unique_ptr 的集合

在更改我的代码以使用唯一指针后,我偶然发现了如何将对象集合返回给客户端。一般来说,我想将对象作为引用或非拥有指针传递。但如果我有一个对象集合,我不能只返回对它的引用。例如,我有一个包含对象集合的简单类,这些对象都创建一次,之后不会更改。usingObjectUPtr=std::unique_ptr;classMyClass{public:conststd::vector&GetObjectsOldStyle()const{returnmObjectsOldStyle;}conststd::vector&GetObjectsNewStyleA()const{//Idon'tliketha

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s

c++ - 我可以使用 CreateFile,但将句柄强制为 std::ofstream 吗?

是否有任何方法可以利用Win32API中的文件创建标志,例如FILE_FLAG_DELETE_ON_CLOSE或FILE_FLAG_WRITE_THROUGH,如此处所述http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx,但随后强制该句柄进入std::ofstream?ofstream的接口(interface)显然是平台无关的;我想在“幕后”中强制一些平台相关设置。 最佳答案 可以将C++std::ofstream附加到Windows文件句柄。以下代码在VS20