标签: conditional-operator

C#条件运算符不是语句?

我有一个简单的小代码片段令我感到沮丧:

HashSet<long> groupUIDs = new HashSet<long>();
groupUIDs.Add(uid)? unique++ : dupes++;
Run Code Online (Sandbox Code Playgroud)

在编译时,它会生成错误:

只有赋值,调用,递增,递减和新对象表达式才能用作语句

HashSet.Add 记录为返回bool,因此三元(?)运算符应该工作,这看起来像是一种完全合法的方式来跟踪我添加到哈希集的唯一和重复项的数量.

当我将其重新格式化为if-then-else时,它可以正常工作.

任何人都可以解释错误,如果有一种方法可以做一个简单的三元运算符?

c# conditional-operator

22
推荐指数
4
解决办法
2999
查看次数

Python条件运算符解决方法如何工作?

根据我的阅读,我发现内置的三元运算符不存在(我很乐意了解它).

我发现以下代码作为替代:

def val():
    var = float(raw_input("Age:"))
    status = ("Working","Retired")[var>65]
    print "You should be:",status
Run Code Online (Sandbox Code Playgroud)

我无法理解这段代码是如何工作的; 任何人都可以解释我实际上代码是如何工作的?我也很想知道为什么三元运算符不存在; 任何关于此的参考或链接都是有用的.

我在Windows Vista上运行Python 2.6.4.

python indexing boolean conditional-operator

21
推荐指数
4
解决办法
9569
查看次数

三元运算符和C语言的返回

为什么我们不能在C中的三元运算符中使用return关键字,如下所示:sum> 0?返回1:返回0;

c conditional-operator

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

三元运算符的指针转换问题

我知道三元运算符有一些令人惊讶的限制,但我有点困惑,这无法为我编译:

void foo(bool b)
{
    int* ptr =  ((b) ? NULL : NULL);
}
Run Code Online (Sandbox Code Playgroud)

显然,这是显示问题所需的最低限度.错误是:

[BCC32 Error] Unit11.cpp(20): E2034 Cannot convert 'int' to 'int *'
Run Code Online (Sandbox Code Playgroud)

编译器是不到100%符合Embarcadero C++ Builder 2010的,因此编译器错误远非不可能......

注意:修改Parens以避免混淆我的意图.

注2:我对自己如何首先得到这个结构感到有些困惑,所以这是我的借口:我在一行上得到了一些编译错误a = b? c : d,其中b,c和d都是复杂的表达式.为了缩小范围,我用s 代替c,以检查是否是罪魁祸首.在这一点上,一切都在手推车里下地狱.dNULLb

c++ conditional-operator null-pointer c++builder-2010 constant-expression

20
推荐指数
1
解决办法
1508
查看次数

Java条件赋值中的类型错误

在下面的代码中,我有两个相同的条件赋值操作,一个返回Double类型的对象,第二个返回字符串"Integer".

double d = 24.0;

Number o = (d % 1 == 0) ? new Double(d).intValue() : new Double(d).doubleValue();
String result = (d % 1 == 0) ? "Integer" : "Double";

System.out.println(o.getClass()); // prints "class java.lang.Double"
System.out.println(result); // Integer
Run Code Online (Sandbox Code Playgroud)

为什么完全相同的表达式返回两个不同的东西?

java conditional-operator

20
推荐指数
1
解决办法
580
查看次数

"?:"发生了什么?我不知道返回类型

我认为((1 ? (int)1 : (unsigned int)2) > -1)结果是1(true),但实际上它0在Visual Studio 2017中是(假的).

我认为价值(1 ? (int)1 : (unsigned int)2)应该是(int)1,因为1 ?是真的,而且1 > -1是真的.

我不知道为什么这个表达式的最终结果是错误的.

当我尝试转换时((int)(1 ? (int)1 : (unsigned int)2) > -1),它返回1(true).

signed int test = -1;
signed int si = 1;
unsigned int ui = 2;

printf("%d\n", ((1 ? si : ui) > test));
return 0;
Run Code Online (Sandbox Code Playgroud)

我希望输出是1,但实际输出是0.

c unsigned signed ternary-operator conditional-operator

19
推荐指数
1
解决办法
1173
查看次数

Javascript中的条件运算符

是否可以像这样的语句使用条件运算符?

(x == y) ? alert("yo!") : alert("meh!");
Run Code Online (Sandbox Code Playgroud)

或者使用它来分配这样的值是否更正确?

z = (x == y) ? "yo!" : "meh!";
Run Code Online (Sandbox Code Playgroud)

如果像声明一样使用它是不正确的,那么可以添加多行代码来执行吗?为多行代码使用ifthen和switch语句更正确吗?

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!"));
Run Code Online (Sandbox Code Playgroud)

javascript conditional operators conditional-operator

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

使用GCC和bool指针的条件运算符的奇怪结果

在下面的代码中,我memset()是一个stdbool.h bool值变量123.(也许这是未定义的行为?)然后我将指向此变量的指针传递给受害者函数,该函数尝试使用条件操作来防止意外值.但是,由于某种原因,GCC似乎完全取消了条件操作.

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

void victim(bool* foo)
{
    int bar = *foo ? 1 : 0;
    printf("%d\n", bar);
}

int main()
{
    bool x;
    bool *foo = &x;
    memset(foo, 123, sizeof(bool));
    victim(foo);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
user@host:~$ gcc -Wall -O0 test.c
user@host:~$ ./a.out 
123

使这个特别恼人的是该victim()函数实际上在库中,如果值大于1则会崩溃.

转载于GCC版本4.8.2-19ubuntu1和4.7.2-5.没有在clang上复制.

c gcc conditional-operator undefined-behavior

18
推荐指数
3
解决办法
684
查看次数

在这种情况下,多个条件运算符是个好主意吗?

我刚看到关于条件运算符的维基百科文章中的这段代码:

Vehicle new_vehicle = arg == 'B' ? bus      :
                      arg == 'A' ? airplane :
                      arg == 'T' ? train    :
                      arg == 'C' ? car      :
                      arg == 'H' ? horse    :
                      feet;
Run Code Online (Sandbox Code Playgroud)

我已经改变了一点代码,但想法是一样的.您会发现条件运算符的这种使用是否可以接受?它比if- elseconstruct 更简洁,并且使用一个开关肯定会为bug提供一整套新的机会(任何人都会堕落).此外,if- elses并且switch不能用作R值,因此您必须先创建变量,对其进行初始化,然后根据需要进行分配.

我真的很喜欢这个,但我想知道其他人的想法.

但格式化至关重要.

编辑:我还是喜欢这个.但我理解那些说" switch声明是为此做出的"的人.好吧,也许是这样.但是如果条件是返回的函数调用bool怎么办?或者其他一百万件你无法打开的东西.

你开关恋人真的试图说服我,一个巨大的if- else链比较好?是的,不知道如何使用条件运算符的程序员将无法理解这一点.他们应该学习如何使用它.这不是奥术.

c c++ conditional-operator

17
推荐指数
10
解决办法
3616
查看次数

使用条件运算符"?:"和"OR"的PHP语法惊喜

今天,我开口满口如下:

$asdf = ((1 OR true) ? "asdf" : "fdsa");
var_dump($asdf); // print "asdf"

$asdf = (1 OR true) ? "asdf" : "fdsa";
var_dump($asdf); // print "asdf"

$asdf = (1 OR true ? "asdf" : "fdsa");
var_dump($asdf); // print true

$asdf = 1 OR true ? "asdf" : "fdsa";
var_dump($asdf); // print 1
Run Code Online (Sandbox Code Playgroud)

好吧,最后一次并不让我感到惊讶,但第三次?谁能解释一下?

php syntax operators ternary-operator conditional-operator

17
推荐指数
1
解决办法
875
查看次数