标签: conditional-operator

什么是Java?:操作符调用,它做了什么?

我已经使用Java几年了,但直到最近我还没有碰到这个结构:

int count = isHere ? getHereCount(index) : getAwayCount(index);
Run Code Online (Sandbox Code Playgroud)

这可能是一个非常简单的问题,但有人可以解释一下吗?我该怎么看?我很确定我知道它是如何工作的.

  • 如果isHere是真的,getHereCount()被称为,
  • 如果isHere是假getAwayCount()则调用.

正确?这个结构叫做什么?

java syntax ternary-operator conditional-operator

148
推荐指数
6
解决办法
18万
查看次数

为什么"sizeof(a?true:false)"给出四个字节的输出?

我有一小段关于sizeof三元运算符的运算符的代码:

#include <stdio.h>
#include <stdbool.h>

int main()
{
    bool a = true;
    printf("%zu\n", sizeof(bool));  // Ok
    printf("%zu\n", sizeof(a));     // Ok
    printf("%zu\n", sizeof(a ? true : false)); // Why 4?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(GCC):

1
1
4 // Why 4?
Run Code Online (Sandbox Code Playgroud)

但在这里,

printf("%zu\n", sizeof(a ? true : false)); // Why 4?
Run Code Online (Sandbox Code Playgroud)

三元运算符返回boolean类型,sizeof bool类型是1C中的字节.

为什么要sizeof(a ? true : false)输出四个字节?

c boolean sizeof conditional-operator c11

131
推荐指数
5
解决办法
1万
查看次数

Bash if [false]; 返回true

本周一直在学习bash并陷入困境.

#!/bin/sh

if [ false ]; then
    echo "True"
else
    echo "False"
fi
Run Code Online (Sandbox Code Playgroud)

这将始终输出True,即使条件似乎表示不是这样.如果我删除括号[]然后它工作,但我不明白为什么.

bash conditional-operator

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

布尔值,条件运算符和自动装箱

为什么这会抛出 NullPointerException

public static void main(String[] args) throws Exception {
    Boolean b = true ? returnsNull() : false; // NPE on this line.
    System.out.println(b);
}

public static Boolean returnsNull() {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

虽然这不是

public static void main(String[] args) throws Exception {
    Boolean b = true ? null : false;
    System.out.println(b); // null
}
Run Code Online (Sandbox Code Playgroud)

解决办法是更换的方式false通过Boolean.FALSE,以避免null被拆箱到boolean,可呈现是不可能的.但这不是问题.问题是为什么?JLS中是否有任何引用证实了这种行为,尤其是第二种情况?

java autoboxing boolean nullpointerexception conditional-operator

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

什么是问号"?" 和冒号":"运算符用于?

关于使用问号的两个问题"?" 和打印函数括号内的冒号":"运算符:它们做了什么?此外,是否有人知道他们的标准术语或我可以在哪里找到有关其使用的更多信息?我读过它们与'if''else'语句类似.

int row = 10;
int column;
while (row >= 1)
{
    column = 1;
    while(column <= 10)
    {
        System.out.print(row % 2 == 1 ? "<" : "\r>");
        ++column;
    }
    --row;
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

java operators ternary-operator conditional-operator

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

为什么带逗号的三元运算符仅在真实情况下评估一个表达式?

我目前正在学习使用C++ Primer一书的C++,本书的其中一个练习是:

解释以下表达式的作用: someValue ? ++x, ++y : --x, --y

我们知道什么?我们知道三元运算符的优先级高于逗号运算符.使用二元运算符这很容易理解,但是对于三元运算符,我有点挣扎.使用二元运算符"具有更高的优先级"意味着我们可以使用具有更高优先级的表达式周围的括号,并且它不会更改执行.

对于三元运算符,我会这样做:

(someValue ? ++x, ++y : --x, --y)
Run Code Online (Sandbox Code Playgroud)

有效地产生相同的代码,这无法帮助我理解编译器如何对代码进行分组.

但是,通过使用C++编译器进行测试,我知道表达式编译并且我不知道:运算符本身可以代表什么.所以编译器似乎正确地解释了三元运算符.

然后我以两种方式执行程序:

#include <iostream>

int main()
{
    bool someValue = true;
    int x = 10, y = 10;

    someValue ? ++x, ++y : --x, --y;

    std::cout << x << " " << y << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

11 10
Run Code Online (Sandbox Code Playgroud)

而另一方面someValue = false它与它打印:

9 9
Run Code Online (Sandbox Code Playgroud)

为什么C++编译器生成的代码只能为三元运算符的真分支递增x,而对于三元的假分支,它会减少xy

我甚至把括号括在真正的分支周围,就像这样:

someValue ? …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator operator-precedence language-lawyer

118
推荐指数
4
解决办法
6954
查看次数

运算符优先级与Javascript三元运算符

我似乎无法将这个代码的第一部分(+ =)与三元运算符结合起来.

h.className += h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)

我认为这段代码的工作方式如下:

h.className = h.className + h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)

但这不正确,因为这会在我的控制台中出错.

所以我的问题是我应该如何正确地插入这段代码?

javascript variable-assignment conditional-operator operator-precedence compound-assignment

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

树枝:IF有多种条件

似乎我有一个问题,如果声明.

{%if fields | length > 0 || trans_fields | length > 0 -%}
Run Code Online (Sandbox Code Playgroud)

错误是:

Unexpected token "punctuation" of value "|" ("name" expected) in 
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这不起作用,就像是因为所有管道都丢失了枝条.

我试过这个:

{% set count1 = fields | length %}
{% set count2 = trans_fields | length %}
{%if count1 > 0 || count2 > 0 -%}
Run Code Online (Sandbox Code Playgroud)

但是如果也失败了.

然后尝试了这个:

{% set count1 = fields | length > 0 %}
{% set count2 = trans_fields | length > 0 %}
{%if count1 || count2 -%}
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用,每次都是同样的错误......

所以...这引出了一个非常简单的问题:Twig是否支持多种条件?

php conditional-operator twig

114
推荐指数
1
解决办法
18万
查看次数

如何在PHP中使用三元运算符(?:)作为"if/else"的简写?

根据此页面中的示例,我在下面提供了工作和非工作代码示例.

工作代码使用if声明:

if (!empty($address['street2'])) echo $address['street2'].'<br />';
Run Code Online (Sandbox Code Playgroud)

使用三元运算符的非工作代码:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

更新
在Brian的小费之后,我发现回声$test输出了预期的结果.以下作品就像一个魅力!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

php ternary-operator conditional-operator

104
推荐指数
7
解决办法
24万
查看次数

如何编写三元运算符(aka if)表达式而不重复自己

例如,像这样:

var value = someArray.indexOf(3) !== -1 ? someArray.indexOf(3) : 0
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?同样,我不是在寻找上面确切问题的答案,只是一个例子,说明何时可能在三元运算符表达式中重复操作数...

javascript conditional-operator

102
推荐指数
9
解决办法
1万
查看次数