7

给定以下 C 源代码:

const int foo(void)
{
    return 42;
}

gcc编译没有错误,但使用-Wextraor-Wignored-qualifiers时,会出现以下警告:

warning: type qualifiers ignored on function return type

我知道在 C++ 中有充分的理由区分const函数和非const函数,例如在运算符重载的上下文中。

然而,在纯 C 语言中,我看不出为什么gcc不发出错误,或者更简洁地说,为什么标准允许const函数。

为什么允许在函数返回类型上使用类型限定符?

4

3 回答 3

4

考虑:

#include <stdio.h>

const char* f()
{
    return "hello";
}
int main()
{
    const char* c = f();

    *(c + 1) = 'a';

    return 0;
}

如果const返回值不允许,则代码将编译(并在运行时导致未定义的行为)。

const当函数返回指向不可修改的指针时很有用。

于 2012-08-21T10:04:25.877 回答
2

如果从函数返回的被限定为const.

即使返回的值不合格,您也无法更改它。

foo() = -42; /* impossible to change the returned value */

所以使用const是多余的(通常省略)。

于 2012-08-21T10:02:35.037 回答
2

因为它对指针类型有意义,所以我的猜测是它只是让语法更简单,所以没有人认为值得将const非指针返回值作为错误。

此外,您与 C++ 的比较有点偏离,因为 C++ 中的常量方法是通过constlast 声明的:

int foo() const;

const方法存在和具有返回值的方法之间没有关系const,它们是完全不同的事物。语法使这一点相当清楚。

于 2012-08-21T10:12:34.820 回答