【问题标题】:Omit void as function result in C++在 C++ 中省略 void 作为函数结果
【发布时间】:2020-10-21 01:22:21
【问题描述】:

在 C/C++ 中,有两种方法可以声明一个不返回任何内容的函数。 第一个是声明一个不带参数的函数:

// no arguments
void f() {
}

第二个是声明一个接受void的函数:

// still no arguments
void f(void) {
}

但是,函数结果不是这样:我们不能像这样在函数开头省略void

// returns nothing
f() {
  return; // yay
}

那么,绝对没有办法像函数参数一样在函数开头省略void

【问题讨论】:

  • 嗯,不,不是真的,除非你计算返回auto。无论如何,这有什么意义?它只有5个字符。从技术上讲,在 C-89 中,您可以省略返回类型,它会被假定为“int”,但不建议这样做。 C++ 中没有隐式整数。另请注意,void f() 没有在 C 中定义不带参数的函数,它定义了一个带不确定数量参数的函数,这意味着编译器不会检查对 f 的函数调用是否具有正确数量的参数论据。
  • C 还是 C++?它们是不同的语言,对函数定义中的空参数列表有不同的 IIRC 规则。
  • 至少在 C 中,f()f(void) 实际上是非常不同的。此外,指定函数的返回类型有助于解析,尤其是在 C++ 的语法混乱中。
  • 正如我看到的警告忽略者之一(非常非常糟糕)。如果您阅读警告,答案将很明显:<source>:4:1: warning: return type defaults to 'int' [-Wimplicit-int] f() { ^ <source>: In function 'f': <source>:5:3: warning: 'return' with no value, in function returning non-void return; // yay ^~~~~~
  • 您只能在 C89 或更早版本中执行此操作。 C++ 不允许这样做。较新的 C 标准也没有

标签: c++ c void


【解决方案1】:

那么,绝对没有办法像函数参数那样在函数的开头省略 void 吗?

不,绝对没有。在 C++ 和 C99 或更高版本中,没有没有返回类型的函数声明语法。在 C99 之前的 C 中使用过,但默认返回类型是 int 而不是 void

请注意,void f()void f(void) 在 C 中的声明是不等价的。前者声明具有未指定参数的函数,而后者声明具有空参数列表的函数。在 C++ 中,两者都声明一个带有空参数列表的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多