标签: operator-precedence

了解嵌套的PHP三元运算符

我不明白输出(" four")是怎么来的?

$a = 2;

echo
  $a == 1 ? 'one'   :
  $a == 2 ? 'two'   :
  $a == 3 ? 'three' :
  $a == 5 ? 'four'  : 
    'other'  
  ;

// prints 'four'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么" four"被打印出来.

php ternary-operator operator-precedence

17
推荐指数
2
解决办法
4073
查看次数

i = ++ i + ++ i; 在C++中

有人可以向我解释为什么这个代码打印14?我刚刚被另一名学生问过,无法弄明白.

int i = 5;
i = ++i + ++i;
cout<<i;
Run Code Online (Sandbox Code Playgroud)

c++ puzzle operator-precedence

16
推荐指数
3
解决办法
2338
查看次数

Mysql或/和优先级?

我想知道如何和/和工作?

例如,如果我想获取display = 1的所有行

我可以做 WHERE tablename.display = 1

如果我想要显示= 1或2的所有行

我可以做 WHERE tablename.display = 1 or tablename.display = 2

但是,如果我想获得display = 1或2以及任何内容,标签或标题所包含的所有行,该怎么办?hello world

逻辑将如何发挥作用?

Select * from tablename 
where display = 1 or display = 2 and content like "%hello world%" or tags like "%hello world%" or title = "%hello world%"
Run Code Online (Sandbox Code Playgroud)

我的猜测.但后来我可以通过几种方式阅读.

它是否读出:

 (display = 1 or display = 2) and (content like "%hello world%" or tags like "%hello world%" or title = "%hello world%")
Run Code Online (Sandbox Code Playgroud)

或者作为 …

mysql operator-precedence

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

Python比较运算符从左到右链接/分组?

运算符优先级的Python文档说明:

同一个框组中的操作员从左到右(除了比较,包括测试,它们都具有相同的优先级和从左到右的链 - 参见比较部分......)

这是什么意思?特别:

  1. "从同一个盒子组中的操作员从左到右(除了比较......)" - 做比较不是从左到右分组?

  2. 如果比较不是从左到右分组,那么他们做了什么呢?他们"链"而不是"群体"吗?

  3. 如果比较"链"而不是"组","链接"和"分组"之间有什么区别?

  4. 什么样的例子可以证明比较运算符从左到右而不是从右到左链接?

python comparison operator-precedence associativity

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

JS vs PHP:与logical-or一起使用时的赋值运算符优先级

(PHP有||OR.只有JS ||.)

JS.根据MDN的 ||优先级高于=.所以这不起作用:

a || a = 1;
Run Code Online (Sandbox Code Playgroud)

因为它被评估为:

(a || a) = 1;
Run Code Online (Sandbox Code Playgroud)

这会导致"分配中的左侧无效".我明白那个.那讲得通.

PHP.根据PHP.net,它对PHP的作用相同:||之前=.但是,我一直都在使用它:

$a || $a = 1;
Run Code Online (Sandbox Code Playgroud)

为什么它在PHP中有效?最重要的是:PHP的OR优先级低于=,所以这些不应该这样做:

$a || $a = 1;
$a OR $a = 1;
Run Code Online (Sandbox Code Playgroud)

但他们做... https://3v4l.org/UWXMd

我认为JS' ||根据MDN的表工作,而PHP的OR工作方式就像PHP的表一样,但PHP ||不应该像它那样工作.

这是另一个奇怪的PHP怪癖吗?

该手册还提到了这一点:

尽管=优先级低于大多数其他运算符,但PHP仍然允许使用类似于以下内容的表达式:if (!$a = foo())在这种情况下,返回值将foo()被放入$a.

优先级表决定PHP应该评估(!$a) = …

php operator-precedence

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

PHP7 method_exists未捕获错误:函数名必须是字符串

我收到此错误:

致命错误:未捕获错误:函数名称必须是字符串

对于此代码:

if (function_exists($item['function'])) {
    $item['function']($item, $default);
} elseif (method_exists($this, $item['function'])) {
    $this->$item['function']($item, $default);
}
Run Code Online (Sandbox Code Playgroud)

我知道将代码更改为

if (function_exists($item['function'])) {
    $item['function']($item, $default);
} elseif (method_exists($this,$item['function'])) {
    $this->{$item['function']}($item, $default);
}
Run Code Online (Sandbox Code Playgroud)

解决了这个错误,但我的问题是,应该这样

 $item['function']($item, $default);
Run Code Online (Sandbox Code Playgroud)

也被转换为

{$item['function']}($item, $default);
Run Code Online (Sandbox Code Playgroud)

还是可以保留原样?

php operator-precedence php-7

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

为什么' - ++ a- - ++ + b--'按此顺序进行评估?

为什么以下打印bD aD aB aA aC aU而不是aD aB aA aC bD aU?换句话说,为什么b--之前进行评估--++a--++

#include <iostream>
using namespace std;

class A {
    char c_;
public:
    A(char c) : c_(c) {}
    A& operator++() {
        cout << c_ << "A ";
        return *this;
    }
    A& operator++(int) {
        cout << c_ << "B ";
        return *this;
    }
    A& operator--() {
        cout << c_ << "C ";
        return *this;
    }
    A& operator--(int) {
        cout << c_ << "D "; …
Run Code Online (Sandbox Code Playgroud)

c++ evaluation operator-overloading operator-precedence compiler-optimization

16
推荐指数
3
解决办法
2848
查看次数

Python:"导入"更喜欢什么 - 模块或包?

假设在当前目录中有一个名为的文件somecode.py,以及一个somecode包含__init__.py文件的目录.现在我从这个执行的目录运行一些其他Python脚本import somecode.将导入哪个文件 - somecode.pysomecode/__init__.py

是否有一个定义且可靠的搜索顺序可以解决这个问题?

哦,有没有人提到这种行为的官方文档?:-)

python module package operator-precedence python-import

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

用C语言中的++运算符对语句进行短路评估

我在Windows 7上的Code :: Blocks 10.05中执行了以下代码.

int a=0,b=0,c;
c=a++&&b++;
printf("\na=%d\nb=%d\nc=%d\n\n",a,b,c);
Run Code Online (Sandbox Code Playgroud)

我获得的输出如下,

a=1
b=0
c=0
Run Code Online (Sandbox Code Playgroud)

由于短路评估,这非常有意义.

表达式a++是后递增的,0并返回到逻辑和(&&).因此,部分b++不评估,因为两个0 && 00 && 1的计算结果为0.

但这引起了我的怀疑.运营商的优先价值清楚地表明,++优先级高于&&.所以我的理解是这样的,a++并且b ++都被评估,然后&&只检查表达式的结果a++来做出决定.但这并没有发生,只是a++在这里评估.

这种行为的原因是什么?是否&&是一个顺序点事做这种行为?如果是这样,为什么我们说&&优先级低于++

c operator-precedence short-circuiting

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

多项任务混淆

我知道赋值运算符是右关联的.

所以例如 x = y = z = 2相当于(x = (y = (z = 2)))

既然如此,我尝试了以下方法:

foo.x = foo = {a:1}
Run Code Online (Sandbox Code Playgroud)

我期望foo使用value创建对象{a:1},然后x将创建属性,该属性foo将只是foo对象的引用.

(实际上,如果我要将多个赋值语句分成两个单独的语句,会发生什么foo = {a:1};foo.x = foo;)

结果实际上是:

ReferenceError:未定义foo(...)

那么我尝试了以下内容:

var foo = {};
foo.x = foo = {a:1};
Run Code Online (Sandbox Code Playgroud)

现在我不再得到例外但是foo.x未定义!

为什么作业不按我的预期工作?


免责声明:"重复"问题似乎与我提出的问题非常不同,因为问题在于赋值中创建的变量是全局的,与使用var关键字创建的变量相关联.这不是问题所在.

javascript operator-precedence associativity multiple-assignment

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