@YukariReimu 我个人给出的指针声明为 int (*(*func2)(int i))[10],可以通过编译与实际调用测试。
C++11 尾置返回类型尾置返回类型 尾置返回类型(trailing return type)是C++11中新增的特性,任何函数的定义都可以使用尾置返回类型,但是尾置返回类型更适合用于返回类型比较复...
@YukariReimu 我个人给出的指针声明为 int (*(*func2)(int i))[10],可以通过编译与实际调用测试。
C++11 尾置返回类型尾置返回类型 尾置返回类型(trailing return type)是C++11中新增的特性,任何函数的定义都可以使用尾置返回类型,但是尾置返回类型更适合用于返回类型比较复...
您好,我个人认为您博客开始所举的那个函数指针int (*func(int i))[10]存在一些问题。
对于如下代码:
#include <bits/stdc++>
using namespace std;
int main() {
int (*func(int i))[10];
int (*(func1(int i)))[10];
cout << is_same<decltype(func), decltype(func1)>(func, func1) << endl;
}
得到的编译器报错如下:
error: no matching function for call to ‘std::is_same<int (*(int))[10], int (*(int))[10]>::is_same(int (* (&)(int))[10], int (* (&)(int))[10])’
编译器为 g++ (Ubuntu 9.4.0-1ubuntu1~18.04) 9.4.0
从报错信息可以看出,您的声明int (*func(int i))[10]其实是等价于(*(func(int i)))[10]的,而其应当解释如下:
变量名为func(func);
func是callable的,接受一个int作为参数 (func(int i));
对上述结果进行解引用(*(func(int i)))后,进行下标访问(*(func(int i)))[10],能得到一个int;
这样看起来的原因是()的算符优先级高于*,但c++编译时算符优先级是不是这样的我个人就不清楚了.
这样分析的话,func其实并不是一个函数指针,而是一个函数变量(我无法找到一个更确切的称呼,只能这样给这类情况命名),c++为什么容许这样的语法我个人就无法理解了.
C++11 尾置返回类型尾置返回类型 尾置返回类型(trailing return type)是C++11中新增的特性,任何函数的定义都可以使用尾置返回类型,但是尾置返回类型更适合用于返回类型比较复...