标签: conditional-operator

VB.NET中的Coalesce运算符和条件运算符

可能重复:
VB.NET中是否有条件三元运算符?

大家好,我们可以在VB.NET中使用Coalesce运算符(??)和条件三元运算符(:),就像在C#中一样?

vb.net conditional-operator null-coalescing-operator

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

短路声明评估 - 这是保证吗?[C#]

这里有关于C#中的短路语句的快速问题.使用if语句:

if (MyObject.MyArray.Count == 0 || MyObject.MyArray[0].SomeValue == 0)
{

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

是否保证评估将在"MyArray.Count"部分之后停止,前提是该部分为真?否则我将在第二部分得到一个空例外.

c# conditional-operator short-circuiting logical-operators

16
推荐指数
3
解决办法
9089
查看次数

应该std :: common_type使用std :: decay吗?

鉴于类型A,B,我关注的是确切的定义std::common_type<A,B>,忽略了std::common_type<A...>任意类型的可变参数A....所以让

using T = decltype(true ? std::declval<A>() : std::declval<B>());
using C = std::common_type<A,B>;
Run Code Online (Sandbox Code Playgroud)

现在,根据一些消息来源,我发现了以下关系(typename为简洁而省略):

  • cppreference.com: C::type = std::decay<T>::type

  • cplusplus.com: C::type = T

  • GCC 4.8.1 <type_traits>实施: C::type = std::decay<T>::type如果T有效,否则C不包含::type成员("SFINAE友好")

  • Clang 3.3 <type_traits>实施: C::type = std::remove_reference<T>::type

我找到"SFINAE友好"版本的GCC的一个小细节,而std::remove_referencestd::decay实际上仅在内置阵列和功能,加上CV-资格有所区别,这再次我不关心了.所以我的问题是

应该是decay<T>::type还是只是T?使用的理由是decay<T>::type什么?它只是关于表示结果,A() + B()例如算术表达式吗?

例如,尝试了一下,我发现在"正义T"定义的情况下,我们有

common_type<int&,int&> = int&
common_type<int&,long&> = long …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator lvalue type-traits c++11

16
推荐指数
1
解决办法
1626
查看次数

?没有其他部分的操作员

我用C#?运算符,当我有if语句影响一行,这一切都很好.但是让我说我​​有这个代码(使用经典的if语句):

if(someStatement)
{
    someBool = true;  //someBools value is unknown
}
else
{
    //Do nothing
}
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式在单线上实现:

someBool = (someStatement) ? true : someBool;
Run Code Online (Sandbox Code Playgroud)

但为什么我不能这样做:

someBool = (someStatement) ? true : ;
//or possibly
someBool = (someStatement) ? true;
Run Code Online (Sandbox Code Playgroud)

这有可能吗?如果是,使用一种方法比另一种方法有什么好处吗?如果没有,为什么你不能这样做?

c# theory conditional-operator

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

php如果不是陈述

这可能是我的服务器设置的方式,但我正在撞墙.我想要做的是说,如果$action没有值或者有一个不是"添加"或"删除"的值而不是有错误,那么继续运行脚本.但是,无论是什么,我都会收到错误$action.

 $action = $_GET['a'];
 if((!isset($action)) || ($action != "add" || $action != "delete")){
     //header("location:index.php");
     echo "error <br>";
 }
Run Code Online (Sandbox Code Playgroud)

$action正在设置正确,如果运行类似的if($action =="add")工作.这是在我的本地主机上,所以可能是一个设置问题.

php if-statement conditional-operator

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

在三元运算符php中使用return

我试图在三元运算符中使用return,但收到错误:

Parse error: syntax error, unexpected T_RETURN 
Run Code Online (Sandbox Code Playgroud)

这是代码:

$e = $this->return_errors();
(!$e) ? '' : return array('false', $e);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

谢谢!

php conditional-operator

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

如果返回,"无法确定,因为没有隐含的转换"

如果返回,我有以下ASP.NET Web Api 2动作和三元组:

[HttpDelete]
public IHttpActionResult Delete()
{
    bool deleted;

    // ...

    return deleted ? this.Ok() : this.NotFound();
}
Run Code Online (Sandbox Code Playgroud)

我收到了

无法确定条件表达式的类型,因为'System.Web.Http.Results.OkResult'和'System.Web.Http.Results.NotFoundResult'之间没有隐式转换

什么时候他们都实施IHttpActionResult.

但是,如果我删除了三元组,编译器很高兴:

if (deleted)
{
    return this.Ok();
}
return this.NotFound();
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

.net c# polymorphism conditional-operator asp.net-web-api2

15
推荐指数
2
解决办法
2786
查看次数

使用true和false作为条件运算中的表达式

我正在维护一些代码,并且发现了以下模式:

var isMale = (row["Gender"].ToString() == "M") ? true : false;
Run Code Online (Sandbox Code Playgroud)

而不是这个:

var isMale = (row["Gender"].ToString() == "M");
Run Code Online (Sandbox Code Playgroud)

是否有任何理由为什么会有人这样做?有人认为前者更具可读性或更清晰吗?是否有某种旧的C"陷阱",这是一个保留吗?

c# coding-style readability conditional-operator

14
推荐指数
3
解决办法
7374
查看次数

三元运算符不适用于lambda函数

我正在分配std::function<double()>一个lambda表达式.这个片段有用

if(fn_type==exponential)
    k.*variable = [=,&k](){ return initial*exp(-k.kstep*par); };
else
    k.*variable = [=,&k](){ return initial*pow(k.kstep, par); };
Run Code Online (Sandbox Code Playgroud)

而如果我想使用三元运算符

k.*variable = (fn_type==exponential ? [=,&k](){ return initial*exp(-k.kstep*par); } : [=,&k](){ return initial*pow(k.kstep, par); });
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: no match for ternary ‘operator?:’ in <awfully long template error, because this whole thing is in a class defined in a function...>
Run Code Online (Sandbox Code Playgroud)

这是一个gcc bug(我使用的是4.7.2)?否则为什么标准中有这个限制?

c++ lambda conditional-operator c++11

14
推荐指数
1
解决办法
3911
查看次数

IE条件运算符:OR ...如果大于ie9或不是IE

我想只包含历史记录和ajaxify如果浏览器是ie9或更高,或者不是 ie:

<!--[if gte IE 9]>
    <script type="text/javascript" src="assets/js/plugins/history.js"></script>
    <script type="text/javascript" src="assets/js/plugins/ajaxify.js"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用OR运算符来说出这个:

<!--[if gte IE 9 | !IE ]> ??

谢谢!

html internet-explorer conditional-operator conditional-statements

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