标签: conditional-operator

在Oracle中if(condition,then,else)

如果您可以在查询中使用函数来检测空值,MySQL/MSSQL有一个整洁的小内联,如下所示.

SELECT

...

foo.a_field AS "a_field",
SELECT if(foo.bar is null, 0, foo.bar) AS "bar",
foo.a_field AS "a_field",

...
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是这个代码在Oracle数据库上运行是不安全的,因为它似乎不支持这种内联语法.

Oracle中是否有相同的内容?

sql oracle plsql conditional-operator

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

如何将使用三元运算符的C++代码移植到Rust?

如何将此C++代码移植到Rust:

auto sgnR = (R >= 0.) ? 1. : -1.;
Run Code Online (Sandbox Code Playgroud)

我看过match关键字的一些例子,但我不明白它是如何工作的.

if-statement conditional-operator rust

12
推荐指数
2
解决办法
2900
查看次数

有条件的?:具有类构造函数的运算符

有人可以解释我为什么,cc1以不同的方式构建.我明白我参考了'?'创建的副本 操作员,在施工后被摧毁,但为什么在第一种情况下它表现出其他方式.我已经测试过它的优化,但即使从控制台读取条件,我也有相同的结果.提前致谢

#include <vector>

class foo {
public:
    foo(const std::vector<int>& var) :var{ var } {};
    const std::vector<int> & var;
};

std::vector<int> f(){
    std::vector<int> x{ 1,2,3,4,5 };
    return x;
};

int main(){
    std::vector<int> x1{ 1,2,3,4,5 ,7 };
    std::vector<int> x2{ 1,2,3,4,5 ,6 };
    foo c{ true ? x2 : x1 };    //c.var has expected values 
    foo c1{ true ? x2 : f() };  //c.var empty 
    foo c2{ false ? x2 : f() };  //c.var empty 
    foo c3{ x2 …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator c++14

12
推荐指数
1
解决办法
532
查看次数

为什么C ++不允许条件运算符中的隐式列表初始化?

此代码编译:

std::string f(bool a, std::string const& b)
{
    if (a) return b;
    return {};
}
Run Code Online (Sandbox Code Playgroud)

该代码还可以编译:

std::string f(bool a, std::string const& b)
{
    return a ? b : std::string{};
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译:

std::string f(bool a, std::string const& b)
{
    return a ? b : {};
}
Run Code Online (Sandbox Code Playgroud)

假设?:运算符的两个结果值必须是同一类型,为什么它不像第一个示例中那样推断类型?


看来,这个问题可能有类似的答案,(基本上可以归结为“因为没有人想过写的语言规范时”)。但是,我仍然认为保留该问题很有用,因为问题本身是不同的,这仍然足够令人惊讶,并且其他人不会在搜索此问题时出现。

c++ conditional-operator language-lawyer c++11 list-initialization

12
推荐指数
1
解决办法
351
查看次数

在C#中使用条件运算符键入结果

我正在尝试使用条件运算符,但我会挂起它认为结果应该是的类型.

下面是一个我设法表明我遇到的问题的例子:

class Program
{
    public static void OutputDateTime(DateTime? datetime)
    {
        Console.WriteLine(datetime);
    }

    public static bool IsDateTimeHappy(DateTime datetime)
    {
        if (DateTime.Compare(datetime, DateTime.Parse("1/1")) == 0)
            return true;

        return false;
    }

    static void Main(string[] args)
    {
        DateTime myDateTime = DateTime.Now;
        OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime);
        Console.ReadLine();                        ^
    }                                              |
}                                                  |
// This line has the compile issue  ---------------+
Run Code Online (Sandbox Code Playgroud)

在上面指出的行上,我得到以下编译错误:

无法确定条件表达式的类型,因为'<null>'和'System.DateTime'之间没有隐式转换

我很困惑因为参数是可以为空的类型(DateTime?).为什么需要转换呢?如果它为null,则使用它,如果是日期时间则使用它.

我的印象是:

condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)

与以下相同:

if (condition)
   first_expression;
else
   second_expression;
Run Code Online (Sandbox Code Playgroud)

显然情况并非如此.这背后的原因是什么?

(注意:我知道,如果我将"myDateTime"设为可以为空的DateTime,那么它会起作用.但为什么需要呢?

正如我之前所说,这是一个人为的例子.在我的实例中,"myDateTime"是一个数据映射值,不能为空.)

c# nullable ternary-operator type-conversion conditional-operator

11
推荐指数
1
解决办法
1126
查看次数

错误:这个简单的C代码需要左值?(三元有任务吗?)

我有 :

#include<stdio.h>

int main()
{
 int a=5,b=6;
 (a>b)?b=a:b=b;    // Here is the error
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

但如果我更换:

(a>b)?b=a:b=b;       // Error
with   
(a>b)?(b=a):(b=b);   // No-Error
Run Code Online (Sandbox Code Playgroud)

我理解这lvalue是一个可以分配某些东西的价值,它与它有什么不同rvalue,但为什么会extra parenthesis产生不同.

c ternary-operator conditional-operator

11
推荐指数
2
解决办法
9156
查看次数

"最重要的const"有条件表达式吗?

请考虑以下代码:

int foo(MyClass const* aPtr = 0) {
    MyClass const& a = aPtr ? *aPtr : MyClass(); // Either bind to *aPtr, or to a default-constructed MyClass
    ...
    return a.bar();
}
Run Code Online (Sandbox Code Playgroud)

"最重要的常量",当然,要在这里被使用.目的是允许aPtr传入null (BTW,是的,它必须是指针参数),在这种情况下,临时MyClass对象将被默认构造,并且其生命周期由绑定到它的const引用扩展.然而,如果aPtr不是null,则引用将绑定到其指向的对象,而不会发生任何(昂贵的)复制构造.

问题二是:

  1. 如果aPtr == 0,a保证MyClass在函数结束之前引用有效对象?
  2. 如果aPtr != 0,将a绑定它,而不是其他一些MyClass

根据测试,1的答案几乎肯定是"是".#2我不太确定,但是(复制省略等)......条件表达式似乎有可能最终复制构造一个临时MyClass*aPtr,并延长那个临时的生命.

c++ conditional-operator

11
推荐指数
1
解决办法
211
查看次数

Lambda的C ++三元赋值

知道为什么以下代码段无法编译吗?它报错“错误:?的操作数:具有不同的类型”

  auto lambda1 = [&](T& arg) {
      ...
  };
  auto lambda2 = [&](T& arg) {
      ...
  };
  auto lambda = condition ? lambda1 : lambda2;
Run Code Online (Sandbox Code Playgroud)

c++ lambda conditional-operator c++11

11
推荐指数
5
解决办法
197
查看次数

为什么带有两个常量的三元运算符比带有变量的三元运算符快?

在Java中,我有两个不同的语句,它们通过使用三元运算符来完成相同的结果,如下所示:

  1. num < 0 ? 0 : num;
  2. num * (num < 0 ? 0 : 1);

看起来第二个语句不必要地复杂并且比第一个语句花费的时间更长,但是当我使用以下代码记录每个花费的时间时,结果如下:

final long startTime = System.currentTimeMillis();

Random rand = new Random();
float[] results = new float[100000000];
for (int i = 0; i < 100000000; i++) {
    float num = (rand.nextFloat() * 2) - 1;
    results[i] = num < 0 ? 0 : num;
    //results[i] = num * (num < 0 ? 0 : 1);
}

final long endTime = System.currentTimeMillis();

System.out.println("Total Time: " …
Run Code Online (Sandbox Code Playgroud)

java optimization performance conditional-operator

11
推荐指数
1
解决办法
487
查看次数

在泛型List的ForEach()中使用lambda表达式中的条件运算符?

是不是允许在ForEach中的lambda表达式中有一个条件运算符?

List<string> items = new List<string>{"Item 1", "Item 2", "Item I Care About"};

string whatICareAbout = "";

// doesn't compile :(
items.ForEach(item => item.Contains("I Care About") ? 
whatICareAbout += item + "," : whatICareAbout += "");
Run Code Online (Sandbox Code Playgroud)

编译错误 - >"只能将赋值,调用,递增,递减和新对象表达式用作语句"

尝试使用普通if也不起作用:

// :(
items.ForEach(item => if (item.Contains("I Care About")) {whatICareAbout += item + ", ";}
Run Code Online (Sandbox Code Playgroud)

只是不可能?

c# lambda conditional-operator .net-3.5

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