【问题标题】:What is the default return value of a Boolean function in C++?C++中布尔函数的默认返回值是多少?
【发布时间】:2020-03-24 07:27:29
【问题描述】:

如果我不返回某些东西,C++ 中布尔函数的返回值可能是什么?如果我只返回一个真值而不是假值,那么返回值是什么?这是我的代码:

bool f(int a)
{
//    return value?
}

bool f(int a)
{
    if(a%2) return true;
//    return value here?
}

【问题讨论】:

  • 你不能不从一个应该返回一些东西的函数中返回一些东西。这是未定义的行为。
  • 来自en.cppreference.com/w/cpp/language/return在没有返回语句的情况下从返回值函数(main 除外)的末尾流出是未定义的行为。
  • 请不要使用代码图片;只需将其作为格式正确的文本包含在您的问题中即可。
  • 我很确定您的意思是询问默认返回 value,而不是默认返回 type。 (返回类型正是您定义的,在本例中为bool。它不是默认值,它是明确的。)我将编辑您的问题。请验证我的编辑是否反映了您的意思。

标签: c++ boolean


【解决方案1】:

返回类型是您在函数原型中定义的类型。请注意,C++ 中的函数没有默认返回值(特殊函数 main 除外)。一个应该返回值的函数必须在其所有代码路径中返回一个值。否则你会产生未定义的行为。 比如这个网上C++ working draft

9.6.3 返回语句

...

从构造函数、析构函数或函数的末尾流出 cv void 返回类型等效于没有操作数的返回。 否则,流过除 main (6.8.3.1) 以外的函数的末尾 导致未定义的行为。

【讨论】:

  • 我已经编辑了这个问题。我 99% 确定 OP 是要询问返回 value,而不是返回 type
  • 关于main 的优点。尼克那个。为美好的感觉投票!
【解决方案2】:

在调用非void 函数(main 除外)时程序控制到达没有显式return 值的分支时的行为未定义

(请注意,这是一个比 C 中更强的条件,仅当您尝试使用函数返回值时行为未定义。)

在 C++ 中,您可以使用 auto 让编译器为您计算出返回类型:

auto foo(int n)
{
    if (n >= 0){
        return true;
    } else {
        return false;
    }
}

但是foo 的类型仍然是static,因为它在编译时是已知的。这种方法在使用模板时特别有用。它的设计目的不是让您对自己的类型草率。

【讨论】:

    【解决方案3】:

    如果你编写了一个假设返回一些东西的函数,但你什么都没有返回,你就不能这样做。 所以使用 void 或返回一些东西。

    【讨论】:

    • 不一定有任何错误信息,可能只是任何行为
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2021-07-20
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多