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
    。这是一个有争议但有一定道理的设计决策。