【问题标题】:Function return value defined as a constant定义为常量的函数返回值
【发布时间】:2015-07-21 18:28:22
【问题描述】:

我曾多次看到使用const 类型限定符定义的函数是这样的:

const int foo (int arg)

这有什么意义?无论如何都不能更改函数的返回值..

【问题讨论】:

  • C/C++ 编译器的行为可能会有所不同。
  • 你不会把这和const int * foo(int arg)混淆吧?因为在这种情况下,const 会有意义。
  • 这真的很有意义。但是不,我没有把它和这个混淆。
  • 将其标记为重复的目的是什么,以便让整个观众都了解这个更糟糕的问题?问题..我什至无法理解并注意到它提到了 C++11,这是完全不同的东西。

标签: c function constants


【解决方案1】:

在C中确实没用,编译器可能会发出相应的警告:

$ echo 'const int foo (int arg);' | clang -Weverything -fsyntax-only -xc -
<stdin>:1:1: warning: 'const' type qualifier on return type has no effect
      [-Wignored-qualifiers]
const int foo (int arg);
^~~~~~
1 warning generated.

【讨论】:

  • Windows 下的 EiC 和 gcc 虽然没有检测到警告/错误消息。
  • @Malina: gcc(这里使用 4.9.2)如果你添加 -Wextra
【解决方案2】:

根据 C 规范(C99,第 6.7.3 节):

与限定类型关联的属性仅对左值表达式有意义。

函数不是左值,所以它们的const 关键字没有意义。编译器将在编译期间忽略它们。

参考:Online C99 standard

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2013-07-05
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多