相关疑难解决方法(0)

螺旋规则和'声明跟随用法'用于解析C和C++声明

这个问题遵循关于C声明的另一个问题.阅读这个问题的答案,我读到了螺旋规则,我也理解了"声明遵循用法"的含义.

好到目前为止.但后来我读到了这个宣言:

char *(*(*a[N])())(); 
Run Code Online (Sandbox Code Playgroud)

我想知道如何用"声明跟随用法""规则"来解析它.特别是对于阵列部分.

我读到的是:

(*(*a[N])()) 
Run Code Online (Sandbox Code Playgroud)

是一个()返回a 的函数char *,然后解除引用以下内容

(*a[N])() // 1
Run Code Online (Sandbox Code Playgroud)

这是'函数返回char*',所以1是'返回函数的指针char *'然后我会说'何时(*a[N])被调用,它是[先前的声明]'.此时我们有(*a[N])一个返回指向返回函数的指针的函数char *.

但后来我不知道如何应用这个规则来区分"指向数组的指针"和"指针数组".

有人可以澄清一下吗?

其他问题:这些声明中的"优先级"规则是什么,&(在C++中)*,和[]?[也许"优先"不是正确的术语]


为了检查我是否正确理解了'螺旋规则',我也在下面解析这个表达式; 请告诉我,如果我错了.

       +-----------+
       | +------+  |
       | | +-+  |  |
       | | ^ |  |  |
char* (*(* a[N])())(); 
    ^  ^ ^   ^  ^  ^
    |  | |   |  |  |
    |  | +---+ …
Run Code Online (Sandbox Code Playgroud)

c c++ declaration

17
推荐指数
1
解决办法
3638
查看次数

关于声明的螺旋规则 - 何时出错?

我最近学习用于去复制复杂声明的螺旋规则,它必须用一系列typedef编写.但是,以下评论警告我:

经常引用的简化,仅适用于少数简单案例.

我找不到void (*signal(int, void (*fp)(int)))(int);"简单的案例".顺便说一句,哪个更令人担忧.

所以,我的问题是,在哪种情况下,我应用规则是正确的,哪些是错误的?

c declaration

14
推荐指数
4
解决办法
4038
查看次数

什么是const int const&和const int&C++之间的区别?

在c ++中,我可以编写const int const*一个指向常量int的常量指针.我也可以写const int&一个const引用.那么是const int const&对const int的引用吗?

提前致谢!

c++ pointers reference

3
推荐指数
2
解决办法
149
查看次数

理解const的位置

如果我有一个如下所示的成员函数:

const T& temp const( const T& t) const{
    //some code
    return t;
}
Run Code Online (Sandbox Code Playgroud)

每个const做什么,按顺序从左到右?这是对还是错?

  1. 返回const对象
  2. 无法更改任何不可变的成员字段
  3. 只能传入T类型的const对象
  4. 这是一个const成员函数,只能用const对象调用

c++ const

1
推荐指数
1
解决办法
54
查看次数

标签 统计

c++ ×3

c ×2

declaration ×2

const ×1

pointers ×1

reference ×1