函数返回类型的类型限定符

给出以下C源代码:

const int foo(void) { return 42; } 

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

 warning: type qualifiers ignored on function return type 

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

但是在普通的C中,我不明白为什么gcc不会发出错误,或者更简洁,为什么标准允许const函数。

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

考虑:

 #include  const char* f() { return "hello"; } int main() { const char* c = f(); *(c + 1) = 'a'; return 0; } 

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

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

如果从函数返回的被限定为const则无关紧要。

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

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

因此使用const是多余的(通常省略)。

因为它对指针类型有意义,我的猜测是它只是简化了语法,所以没有人认为值得使const非指针返回值成为错误。

此外,您与C ++的比较有点偏,因为C ++中的常量方法是通过使用const last来声明的:

 int foo() const; 

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