240 发简信
IP属地:北京
  • @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中新增的特性,任何函数的定义都可以使用尾置返回类型,但是尾置返回类型更适合用于返回类型比较复...