C++ c++;优先顺序。。这个表达式是如何计算的?
我试图理解我使用的某个模拟工具库的代码。。 它有以下几行:C++ c++;优先顺序。。这个表达式是如何计算的?,c++,C++,我试图理解我使用的某个模拟工具库的代码。。 它有以下几行: propData->fadingStretchingFactor = (double)(propProfile0->samplingRate) * propProfile->dopplerFrequency / propProfile0->baseDopplerFrequency / (double)SECOND; 现在,如果有两个连续的除法运算符
propData->fadingStretchingFactor =
(double)(propProfile0->samplingRate) *
propProfile->dopplerFrequency /
propProfile0->baseDopplerFrequency /
(double)SECOND;
现在,如果有两个连续的除法运算符,如本例中所示,如何计算运算顺序?优先级相等的运算分组由 在C++中,除法是左相联的,这意味着最左边的运算是先分组的,即:
a / b / c
同:
(a / b) / c
优先级相等的操作的分组由确定 在C++中,除法是左相联的,这意味着最左边的运算是先分组的,即:
a / b / c
同:
(a / b) / c
除法是左联想的<代码>a/b/c相当于
(a/b)/c
请注意,C(和C++)不保证术语
a
、b
和C
的求值之间的顺序。例如,foo()/bar()<代码>a/b/c
相当于(a/b)/c
请注意,C(和C++)不保证术语
a
、b
和C
的求值之间的顺序。例如,foo()
从左到右的关联性
+1用于区分绑定和求值顺序。@如果foo
和bar
都使用了一些共享的副作用,该怎么办?@pst:那么行为是未定义的。@OliCharlesworth:不,行为是未指定的。未定义的行为意味着任何事情都可能发生,但这里的情况并非如此。要么先调用foo,要么先调用bar,这些调用不会相互交织。+1用于区分绑定和求值顺序。@ephemient如果foo
和bar
都使用一些共享的副作用会怎么样?@pst:那么行为是未定义的。@OliCharlesworth:不,行为是未指定的。未定义的行为意味着任何事情都可能发生,但这里的情况并非如此。在奇妙的数学科学中,*和/没有优先权:a/b=a*(1/b)和(ab)*c=a*(bc)@Hellfrost他们肯定有优先权:1+2*3!=(1+2)*3
许多(但不是所有)编程语言以相同的优先级定义*
和/
,然后是从左到右的关联性。@pst-我的意思是相互重叠。。。有时英语很难:-P@Hellfrost:这是编程,不是数学。例如,a/b*c
通常不等于a*c/b
。。。我选择我的例子是因为一个原因:——)在奇妙的数学科学*中没有优先权:a/b=a*(1/b)和(ab)*c=a*(bc)@Hellfrost他们肯定有优先权:1+2*3!=(1+2)*3
许多(但不是所有)编程语言以相同的优先级定义*
和/
,然后是从左到右的关联性。@pst-我的意思是相互重叠。。。有时英语很难:-P@Hellfrost:这是编程,不是数学。例如,a/b*c
通常不等于a*c/b
。。。我选择我的例子是因为一个原因:-)所以我假设在我的例子中我们有以下情况:ab/c/d,由于从左到右的结合性,它将是[(ab)/c]/d,简化后得到(ab)/(cd)。。正确吗?所以我假设在我的例子中我们有以下情况:ab/c/d,由于从左到右的结合性,它将是[(ab)/c]/d,简化后得到(ab)/(cd)。。对的