相关疑难解决方法(0)

C中函数调用操作符的相关性

我正在讨论C运营商的关联性话题.

在那里我遇到了这个事实,函数调用操作符()具有从左到右的关联性.但是,当表达式中出现相同优先级的多个运算符时,关联性才会发挥作用.但我找不到涉及函数调用运算符的任何示例,其中关联性起着至关重要的作用.

例如,在语句中a = f(x) + g(x);,结果取决于评估顺序,而不取决于两个函数调用的关联性.类似地,调用f(g(x))g()首先评估函数,然后是函数f().这里我们有一个嵌套的函数调用,并且再次关联不起任何作用.

此优先级组中的其他C运算符是数组下标[],postfix ++postfix --.但我找不到任何涉及这些运算符组合的例子,()其中关联性在表达式评估中起作用.

所以我的问题是函数调用的关联性是否从左到右定义影响C中的任何表达式?任何人都可以提供一个示例,其中函数调用运算符的关联性()在表达式求值中是否重要?

c associativity

31
推荐指数
2
解决办法
2541
查看次数

是否存在左关联前缀运算符或右关联后缀运算符?

这个页面说"前缀运算符通常是右关联的,后​​缀运算符是左关联的"(强调我的).

是否存在左关联前缀运算符或右关联后缀运算符的实例?如果没有,假设的那个会是什么样子,怎么解析?

language-agnostic parsing

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

功能应用程序关联到左侧

根据此表,函数应用程序关联到左侧.那是什么意思?当二元运算符多次出现时,相关性很重要,例如a - b - c.这与功能应用有什么关系?如果函数应用程序与右侧相关联,它将如何不同?

c++ syntax function operators associativity

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

C++:为什么 iter++->empty() 合法?

C++入门练习4.20,5e问表达式iter++->empty();是否合法。假设这iter是一个vector<string>::iterator.

这个表达是合法的。我用 gcc 编译它,并且Stack Overflow 上另一个问题的答案已经解决了这么多。但是,我很困惑为什么它是合法的。

This answer to a similar question给出了以下作为一对等价的表达式:

iter->empty();
iter++;
Run Code Online (Sandbox Code Playgroud)

我书中的运算符优先级表列出的->优先级高于后缀++运算符。这与上面等效代码中的显式操作顺序相匹配。但是,我习惯于看到运算符适用于它们旁边的任何内容。在 的情况下->,我希望编译器将它应用于++(单独,没有iter)并抛出错误。换句话说,我试图将原始表达式括起来为iter(++->empty());,这显然是非法的。

因此,似乎 c++ 需要编译器以更复杂的方式解析表达式,而不仅仅是基于优先级和关联性的括号。那正确吗?如果有一种简单的方法来解释这实际上是如何发生的,我想知道。

c++ pointers post-increment

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

C 和 C++ 中的几个一元运算符

使用像这样的表达式是否符合标准

int i = 1;
+-+-+i;
Run Code Online (Sandbox Code Playgroud)

以及如何确定 i 变量的符号?

c c++

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