我不明白输出(" 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"被打印出来.
有人可以向我解释为什么这个代码打印14?我刚刚被另一名学生问过,无法弄明白.
int i = 5;
i = ++i + ++i;
cout<<i;
Run Code Online (Sandbox Code Playgroud) 我想知道如何和/和工作?
例如,如果我想获取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)
或者作为 …
(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) = …
我收到此错误:
致命错误:未捕获错误:函数名称必须是字符串
对于此代码:
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)
还是可以保留原样?
为什么以下打印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
假设在当前目录中有一个名为的文件somecode.py,以及一个somecode包含__init__.py文件的目录.现在我从这个执行的目录运行一些其他Python脚本import somecode.将导入哪个文件 - somecode.py或somecode/__init__.py?
是否有一个定义且可靠的搜索顺序可以解决这个问题?
哦,有没有人提到这种行为的官方文档?:-)
我在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 && 0和
0 && 1的计算结果为0.
但这引起了我的怀疑.运营商的优先价值清楚地表明,++优先级高于&&.所以我的理解是这样的,a++并且b ++都被评估,然后&&只检查表达式的结果a++来做出决定.但这并没有发生,只是a++在这里评估.
这种行为的原因是什么?是否&&是一个顺序点事做这种行为?如果是这样,为什么我们说&&优先级低于++?
我知道赋值运算符是右关联的.
所以例如 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
php ×3
c++ ×2
python ×2
c ×1
comparison ×1
evaluation ×1
javascript ×1
module ×1
mysql ×1
package ×1
php-7 ×1
puzzle ×1