C++ 什么时候copy_文件实际返回false?
的简单版本具有以下签名:C++ 什么时候copy_文件实际返回false?,c++,c++17,C++,C++17,的简单版本具有以下签名: bool copy_file(const path& from, const path& to); 返回值描述为: 如果文件已复制,则为true,否则为false 这通常是有道理的,您希望使用if包装调用,并在操作失败时报告错误,如下所示: if (!fs::copy_file(inputImage, outputImage)) { LOG(error) << "Failed to copy file:" << inpu
bool copy_file(const path& from, const path& to);
返回值描述为:
如果文件已复制,则为true,否则为false
这通常是有道理的,您希望使用if包装调用,并在操作失败时报告错误,如下所示:
if (!fs::copy_file(inputImage, outputImage))
{
LOG(error) << "Failed to copy file:" << inputImage << " ==> " << outputImage;
}
if(!fs::copy_文件(inputImage,outputImage))
{
LOG(error)使用文件系统处理错误有两种方法。这基本上是从boost继承的。您可以将错误放入error\u code
引用中,或者从异常中获取它
基本上,接受参数的版本保证不会抛出,而不接受参数的版本会抛出错误。如果您不关心导致问题的特定错误,则布尔返回可简化此过程。error\u code
,无论是抛出的还是在参数中,为您提供更多详细信息
所以,要回答你的问题:
如果成功,则返回true,否则返回false
如果需要有关错误的详细信息,可以从异常或error\u code
参数获取。请记住,这可能取决于系统
原因是copy\u file(a,b)
只是copy\u file(a,b,copy\u options::none)
的重载,它将始终返回true
或引发异常。但是当您使用时,例如copy\u file(a,b,copy\u options::skip\u existing)
您也可以毫无例外地接收有效的false
,这样您就知道目标文件已经存在。它如何简化任何事情?如果函数总是出错,那么它实际上永远不会返回false
。因此,基本上,不接受错误代码的版本永远不会返回false和任何代码基于该结果的分支是死代码。此外,我还特别询问了没有错误代码的版本。@Angew我想知道同样的问题,但它在更大的块中可能会有所帮助。我在这里所说的是基于我使用它的经验。是的,rioki,它永远不会返回false。但是,我总是将它放在if块中,以防出现错误ome实现依赖性。文档(您的链接)提到:如果发生错误,非抛出重载将返回false。因此,此bool返回并不专用于此类错误。标准文档非常专门用于错误处理,这部分内容不难阅读。您可以直接参考。30.11.6和30.11.14.4让我重新表述一下:copy_文件中的其他函数
overload set返回一个bool
,该值可能是false
,因此该函数也返回一个bool
,以保持一致性,即使它从来都不是false
。这是一个有争议但有一定道理的设计决策。