为什么函数的任何索引处的下标运算符在C++中总是返回1

Why does the subscript operator at any index on a function always returns 1 in C++?

本文关键字:C++ 返回 运算符 任何 函数 索引 下标 为什么      更新时间:2023-10-16

这是我的代码。似乎f[i]在i的任何值都返回1。

int f(int x) { return 203; }
int main(){
cout<<f[0]<<' '<<f[21]<<' 'f[-1];//= 1 1 1
return 0;
}

使用编译器抛出的警告,我理解这是一个指针,但它的行为似乎与指针不同。

f[-2](1) // = 203, good
f[32](1) // Process returned -1073741571 (0xC00000FD)   execution time : 6.731 s

编辑:我使用带有c++14标志的g++编译器。

它是GCC的扩展:

6.23void-和函数指针上的算术

在GNU C中,在指向void的指针和指向函数的指针上支持加法和减法运算。这是通过将CCD_ 2或函数的大小视为1来实现的。

这样做的结果是sizeofvoid和函数类型上也被允许,并返回1。

指向不存在函数的结果指针,如果被调用,很可能会崩溃或产生奇怪的结果。


似乎f[i]i的任何值返回1

这是cout的一个众所周知的行为。它将所有非零函数指针打印为1,因为它们没有合适的operator<<重载,并且operator<<(bool)被选为最合适的重载。

(f[i]是一个函数,而不是函数指针,但在这种情况下,它会衰减为指针。(