【问题标题】:c++ - Returning "false" in an int returning functionc++ - 在 int 返回函数中返回“false”
【发布时间】:2014-04-08 02:11:54
【问题描述】:

我有一个 int 函数,它在数组中搜索值,如果找到该值,则返回数组中位置的值。如果找不到该值,我只需输入 return false; 这会给我与return 0; 相同的结果吗? 我也想知道如果我做了return NULL; 会发生什么。

【问题讨论】:

    标签: c++ null return


    【解决方案1】:

    与 PHP 和其他语言不同,C++ 类型不会即时更改。 一种做你想做的事情的方法(如果某些东西不起作用则返回 false,但如果它起作用则返回一个 int)将定义返回类型为 bool 的函数,但还要在其中传递一个 int 引用 (int&)。您返回 true 或 false 并将引用分配给正确的值。然后,在调用者中,您查看是否返回 true,然后使用该值。

    bool DoSomething(int input, int& output)
    {
        //Calculations here
        if(/*successful*/)
        {
            output = value;
            return true;
        }
    
        output = 0; //any value really
        return false;
    }
    
    // elsewhere
    int x = 5;
    int result = 0;
    
    if(DoSomething(x, result))
    {
        std::cout << "The value is " << result << std::endl;
    }
    else
    {
        std::cout << "Something went wrong" << std::endl;
    }
    

    【讨论】:

      【解决方案2】:

      false 将从草案 C++ 标准部分 4.7 转换为 0 整体转换 段落 4 说(强调我的未来):

      [...]如果源类型是 bool,值 false 被转换为零并且 值 true 转换为 1。

      我想大多数人会觉得这很奇怪,但它是有效的。至于NULL 部分4.10 指针转换 说:

      空指针常量是整数类型的整数常量表达式 (5.19) prvalue,其计算结果为零或 std::nullptr_t 类型的纯右值。 [...]

      【讨论】:

      • 这就是我所怀疑的,我只是希望它能像布尔值一样工作,因为我使用了实际的单词 false。我将使用不同的方法。谢谢你。 NULL 也会变成 0 吗?好吧。感谢您提供非常完整的答案。
      • @ChrisVachon 以及 0 将转换为 false 并且非零转换为 true,但不完全确定您要做什么。
      • 我实际上是想反其道而行之。我应该返回一个 int 但返回值 false。
      • 实际上是否可以返回与 c++ 函数原型中声明的返回类型不同的数据类型?在 c 中是可能的(至少在 turboC 中)
      • 使用 false 或 NULL 将返回 0 ...但是没有办法从实际的零结果中分辨出这些翻译后的零中的任何一个。如果零是一个合法的合法返回值,那么你可能会因为使用关键字 NULL 或 false 而获得一种错误的安全感。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多