标签: conditional-operator

使用字符串文字作为使用三元运算符的表达式的结果是否有效/建议?

以下代码在 C 语言中有效/良好实践吗?

int x = 1;
printf(x == 1 ? "%d second elapsed" : "%d seconds elapsed", x);
Run Code Online (Sandbox Code Playgroud)

它编译得很好,所以我认为它很好(也因为它只是 if-else 块的语法糖),但如果有人有一些额外的见解,我将不胜感激,谢谢。

PS,我想 C++ 也是如此?

c conditional-operator string-literals

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

将 std::move shared_ptr 与条件运算符一起使用时的奇怪行为

我正在使用std::moveon编写一些 C++ 代码shared_ptr,并得到了非常奇怪的输出。我简化了我的代码如下

int func(std::shared_ptr<int>&& a) {
    return 0;
}

int main() {
    std::shared_ptr<int> ptr = std::make_shared<int>(1);

    for (int i = 0; i != 10; ++i) {
        func(i == 9 ? std::move(ptr) : std::shared_ptr<int>(ptr));
    }

    if (ptr) {
        std::cout << "ptr is not null: " << *ptr << "\n";
    } else {
        std::cout << "ptr is null\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到了输出

ptr is null
Run Code Online (Sandbox Code Playgroud)

正如我所预期的,我的ptrwill 在最后一个循环中被移动(转换为std::shared_ptr<int>&&),并且由于func从不窃取 中的内存a,所以我的 …

c++ conditional-operator shared-ptr move-constructor move-semantics

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

带级联飞镖的三元运算符的奇怪行为

为什么两个结果打印出来是一样的?

final list1 = [ "a", "b", "c" ];
final result1 = true ? list1 : list1..removeWhere((e) => e == "a");
print(result1); // prints ["b", "c"]

final list2 = [ "a", "b", "c" ];
final result2 = false ? list2 : list2..removeWhere((e) => e == "a");
print(result2); // prints ["b", "c"]
Run Code Online (Sandbox Code Playgroud)

这种情况仅发生在三元条件下。当在正常的 if-else 中时,这工作得很好。

conditional-operator dart

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

PHP嵌套条件运算符错误?

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

这应该返回'a',但它不会.它返回'b'.PHP处理条件运算符的不同部分的顺序是否存在错误?

我从这种情况下的多个条件运算符得到了一个好主意吗?它看起来似乎正常工作.

(当然,真实和假是为了示例的目的.在实际代码中,它们分别是评估为真和假的语句.是的,我知道这肯定)

php conditional-operator

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

如何使'<?='可用于C++?

可能重复:
>?=运算符是什么意思?

我找到了这段代码

...
for(k=i+1;k<j;k++) r <?= go(i,k,b)+go(k,j,b);
for(k='A';k<='Z';k++) r <?= 1+go(i,j,k);
...
Run Code Online (Sandbox Code Playgroud)

我对<?=运营商很感兴趣.在我看来,它应该r与运营商右侧的价值进行比较,如果右侧大于r它应该分配右侧的情况r.我想知道这个(和我认为的类似操作符)在哪里定义,我应该怎么做才能使它们与g ++编译器一起使用?

c++ operators conditional-operator

4
推荐指数
1
解决办法
238
查看次数

在条件运算符中运行代码是否安全?

我经常看到并使用如下代码:

var myvar = (1 < 2) ? 3 : 4 ; //if 1 < 2 then myvar = 3, else = 4
Run Code Online (Sandbox Code Playgroud)

但我刚刚看到一个执行代码的代码,就像以下代码的某种替代if(){}else{}:

例:

(1 < 2) ? alert("example1") : alert("example2");
Run Code Online (Sandbox Code Playgroud)

来到我身边的第一个想法是,"哇,这就像6-7个字符更短","无穷无尽的可能性"或"这使我的一天".

我的问题:

  • 这个东西没有错误且使用安全吗?(比如,里面有很多代码,嵌套的东西)

现在,我将继续以正常方式使用它,我担心如果我开始使用它来执行代码片段可能无法正常工作.

javascript conditional-operator

4
推荐指数
1
解决办法
1136
查看次数

Groovy的三元条件运算符是否支持语句,而不仅仅是表达式?

是否可以使用带有Groovy条件运算符的表达式包含语句?这就是我现在正在做的事情,我希望在一个带有println语句的条件语句中将其分解......

if(!expired){
  println 'expired is null'
  return true
}
else if( now.after(expired)){
  println 'cache has expired'
  return true
}
else
  return false
Run Code Online (Sandbox Code Playgroud)

转换成单一陈述......

return (!expired) ? true : (now.after(expired)) ? true : false
Run Code Online (Sandbox Code Playgroud)

...想为调试目的做这样的事情......

return (!expired) ? println 'expired is null' true : (now.after(expired)) ? println 'cache has expired' true : false
Run Code Online (Sandbox Code Playgroud)

groovy expression conditional-operator statements

4
推荐指数
1
解决办法
4528
查看次数

条件运算符中的未定义行为

我不得不分享这个:

在涉及条件运算符的以下微不足道的错误中,我被挂了2天.

这是一个简单的修正,但我想知道:

  1. 为什么错误的代码编译?
  2. 这个bug在做什么?
  3. 为什么这么难以追踪?

越野车代码:

 std::map<int, some_class>   my_map;
int key_ctr = 0;
 //...
std::map<int, some_class>::iterator it_next   =  
                                            key_ctr == 0  ?
                                 it_next  =  my_map.begin()      // BUG!!!
                                 :
                                 it_next  =  --my_map.end();     // BUG!!!!

  // .....
Run Code Online (Sandbox Code Playgroud)

显然,我错误地编写了条件运算符.当我最终发现并纠正这个错误时,Eveyrthing工作完全正常:

正确代码:

 std::map<int, some_class>   my_map;
int key_ctr = 0;
 //...
std::map<int, some_class>::iterator it_next   =  
                                            key_ctr == 0  ?
                                 my_map.begin()              // CORRECTED!
                                 :
                                 --my_map.end();             // CORRECTED!
Run Code Online (Sandbox Code Playgroud)

当我的程序靠近有缺陷的部分时,我的程序就悬挂了 - 好像它处于一个无限循环中.当我用valgrind运行时,我得到了类似的东西

....
==24570== Warning: set address range perms: large range [0x1a7731000, 0x1c5f79000) (defined) …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind iterator conditional-operator undefined-behavior

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

java条件运算符和不同类型

我在ItemClass中有两种方法:

public void setValue(String v);
public void setValue(Double v);
Run Code Online (Sandbox Code Playgroud)

我想使用条件运算符setVAlue在另一个类:

String str = ...
Double dbl = ...
item.setValue((condition) ? str : dbl);
Run Code Online (Sandbox Code Playgroud)

但编译说:

cannot find symbol
symbol  : method setValue(java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>)
Run Code Online (Sandbox Code Playgroud)

我认为编译器使用Double和String 最近的公共超类(超级接口)作为条件运算符的类型.但为什么?

java conditional-operator

4
推荐指数
1
解决办法
571
查看次数

java条件运算符,为什么下面的代码输出为true?

class test {
    public static void main (String[] args) {
        boolean a = false;
        boolean b = true;

        if (a && a || b) {
            System.out.println(true);
        }
    }
} //--why it always true????o/p is true but why??
Run Code Online (Sandbox Code Playgroud)

java conditional-operator

4
推荐指数
1
解决办法
61
查看次数