标签: operator-precedence

"IF"论证评估顺序?

if(a && b)
{
  do something;
}
Run Code Online (Sandbox Code Playgroud)

有没有可能从右到左评估论点(b - > a)?

如果"是",影响评估顺序的是什么?

(我正在使用VS2008)

c++ if-statement operator-precedence

37
推荐指数
3
解决办法
3万
查看次数

SQL UPDATE评估顺序

以下查询中的评估顺序是什么:

UPDATE tbl SET q = q + 1, p = q;
Run Code Online (Sandbox Code Playgroud)

也就是说,将"tbl"."p"被设置为qq + 1?此处的评估顺序是否受SQL标准的约束?

谢谢.

UPDATE

在考虑了Migs的回答之后,我对我能找到的所有数据库进行了一些测试.虽然我不知道标准是什么,但实施方式各不相同.

特定

CREATE TABLE tbl (p INT NOT NULL, q INT NOT NULL);
INSERT INTO tbl VALUES (1, 5);   -- p := 1, q := 5
UPDATE tbl SET q = q + 1, p = q;
Run Code Online (Sandbox Code Playgroud)

我发现的价值"p""q"分别为:

database           p   q
-----------------+---+---
Firebird 2.1.3   | 6 | 6  -- But see …
Run Code Online (Sandbox Code Playgroud)

sql evaluation operator-precedence sql-update

36
推荐指数
2
解决办法
4305
查看次数

MySQL查询/子句执行顺序

在MySQL中执行子句的预定义顺序是什么?有些是在运行时决定的,这个顺序是否正确?

  • FROM clause
  • WHERE clause
  • GROUP BY clause
  • HAVING clause
  • SELECT clause
  • ORDER BY clause

mysql execution operator-precedence

35
推荐指数
2
解决办法
2万
查看次数

如果f修改x,则x*f(x)的值是否未指定?

我已经查看了一系列有关序列点的问题,并且无法x*f(x)确定f修改后的评估顺序是否有保证x,这是不同的f(x)*x.

考虑以下代码:

#include <iostream>

int fx(int &x) {
  x = x + 1;
  return x;
}

int f1(int &x) {
  return fx(x)*x; // Line A
}

int f2(int &x) {
  return x*fx(x); // Line B
}

int main(void) {
  int a = 6, b = 6;
  std::cout << f1(a) << " " << f2(b) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这打印49 42在g ++ 4.8.4(Ubuntu 14.04)上.

我想知道这是保证行为还是未指明.

具体来说,在这个程序中,fx两次x=6都被调用两次,并且两次都返回7次.所不同的是线A计算7×7(取的值x之后 …

c c++ operator-precedence sequence-points c++03

34
推荐指数
4
解决办法
2156
查看次数

函数调用是否在构造函数的初始化列表中排序?

考虑:

int f () {
    static int i = 0;
    return i++;
}

struct Test {
    int a, b;
    Test () : a(f()), b(f()) {}
};

Test t;
Run Code Online (Sandbox Code Playgroud)

我知道a之前b由于其声明的顺序而被初始化struct.

我也知道这两次打电话都没有f参加g(f(), f()).

所以我想知道是否保证t.a == 0t.b == 1

c++ operator-precedence undefined-behavior initialization-order language-lawyer

34
推荐指数
2
解决办法
1430
查看次数

三元条件和赋值运算符优先级

我对直接赋值和三元条件运算符优先级感到困惑:

#include<stdio.h>
int main(void)
{
    int j, k;

    j = k = 0;
    (1 ? j : k) = 1; // first
    printf("%d %d\n", j, k);

    j = k = 0;
    1 ? j : k = 1; // second
    printf("%d %d\n", j, k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

1 0
1 0
Run Code Online (Sandbox Code Playgroud)

但它碰巧是:

1 0
0 0
Run Code Online (Sandbox Code Playgroud)

另外我得到这个警告:

main.cpp:20:warning:语句无效

这是我评论的第二行.

由于直接赋值运算符的优先级低于三元条件运算符,因此我期望将第一行和第二行注释为等效的行.但实际情况并非如此.

我用g ++ --version(Ubuntu 4.4.3-4ubuntu5)4.4.3尝试了这个

c++ conditional-operator operator-precedence

32
推荐指数
3
解决办法
6885
查看次数

如何确定三元运算符的返回类型?

我正在解决有关主教在棋盘上移动的问题。在代码的某一时刻,我有以下语句:

std::cout << (abs(c2-c1) == abs(r2-r1)) ? 1 : 2 << std::endl;
Run Code Online (Sandbox Code Playgroud)

这将产生以下错误:

error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<<'
Run Code Online (Sandbox Code Playgroud)

但是,我通过在代码中包含一个附加变量来立即修复此错误:

error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<<'
Run Code Online (Sandbox Code Playgroud)

三元运算符如何工作,以及如何确定其返回类型(如编译器称为<unresolved overloaded function type>)?

c++ ternary-operator operator-precedence

32
推荐指数
4
解决办法
3882
查看次数

Scala中的右关联方法有什么用?

我刚刚开始使用Scala,我刚学会了如何使方法成为正确关联(而不是在命令式面向对象语言常见的更传统的左关联性).

首先,当我cons在Scala中看到列表的示例代码时,我注意到每个示例总是在右侧有List:

println(1 :: List(2, 3, 4))
newList = 42 :: originalList
Run Code Online (Sandbox Code Playgroud)

然而,即使在一遍又一遍地看到这一点之后,我也没有三思而后行,因为我不知道(当时)这::是一种方法List.我只是假设它是一个运算符(再次,在Java中的运算符意义上),并且关联性并不重要.List在示例代码中始终出现在右侧的事实似乎巧合(我认为它可能只是"首选样式").

现在我知道的更好:它必须以这种方式编写,因为它::是正确联想的.

我的问题是,能够定义右关联方法的重点是什么?

这纯粹是出于审美原因,还是在某些情况下,权利关联实际上可以带来某些与左联结相关的好处?

从我(新手)的角度来看,我真的不知道如何

1 :: myList
Run Code Online (Sandbox Code Playgroud)

比任何更好

myList :: 1
Run Code Online (Sandbox Code Playgroud)

但这显然是一个微不足道的例子,我怀疑这是一个公平的比较.

scala operators operator-precedence

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

操作顺序是否在if表达式内变化?

我最近遇到了一些我认为我立即理解的东西,但是想更多关于它我想了解为什么它按照它的方式工作.

请考虑以下代码.该(x-- == 9)显然得到评估,而(y++ == 11)不是.我的第一个想法是,逻辑上的&&启动,看到表达式已经变为假,并在评估表达式的第二部分之前开始.

我想的越多,我就越不明白为什么会这样做.据我了解,逻辑运算符按优先级顺序低于增量运算.不(y++ == 11)应该评估,即使整体表达已经变为假?

换句话说,操作的顺序是否应该(y++ == 11)if语句实现整个表达式之前进行评估将是错误的?

#include <iostream>
using namespace std;

int main( int argc, char** argv )
{
    int x = 10;
    int y = 10;

    if( (x-- == 9) && (y++ == 11) )
    {
        cout << "I better not get here!" << endl;
    }

    cout << "Final X: " << x << endl;
    cout << "Final Y: " << …
Run Code Online (Sandbox Code Playgroud)

c++ operator-precedence

31
推荐指数
4
解决办法
3150
查看次数

在没有括号的Java中调用新对象的方法:操作违规的顺序?

根据此Java运算符优先级和关联性表,成员访问优先级高于new运算符.

但是,给定一个类myClass和一个非静态成员函数myFunction,以下代码行是有效的:

new myClass().myFunction();

如果.之前评估过new,该行怎么执行?换句话说,为什么不需要括号?

(new myClass()).myFunction();

我的猜测是,由于()共享优先.,因此myClass()首先进行评估,因此编译器甚至在评估new关键字之前就知道myClass正在调用具有零参数的构造函数.然而,这似乎仍然暗示第一行应该是相同的new (myClass().myFunction());,但事实并非如此.

java parsing operator-precedence

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