可能重复:
VB.NET中是否有条件三元运算符?
大家好,我们可以在VB.NET中使用Coalesce运算符(??)和条件三元运算符(:),就像在C#中一样?
这里有关于C#中的短路语句的快速问题.使用if语句:
if (MyObject.MyArray.Count == 0 || MyObject.MyArray[0].SomeValue == 0)
{
//....
}
Run Code Online (Sandbox Code Playgroud)
是否保证评估将在"MyArray.Count"部分之后停止,前提是该部分为真?否则我将在第二部分得到一个空例外.
鉴于类型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_reference和std::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#?运算符,当我有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)
这有可能吗?如果是,使用一种方法比另一种方法有什么好处吗?如果没有,为什么你不能这样做?
这可能是我的服务器设置的方式,但我正在撞墙.我想要做的是说,如果$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")工作.这是在我的本地主机上,所以可能是一个设置问题.
我试图在三元运算符中使用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)
这可能吗?
谢谢!
如果返回,我有以下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)
为什么是这样?
我正在维护一些代码,并且发现了以下模式:
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"陷阱",这是一个保留吗?
我正在分配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)?否则为什么标准中有这个限制?
我想只包含历史记录和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
c# ×4
c++ ×2
c++11 ×2
php ×2
.net ×1
coding-style ×1
html ×1
if-statement ×1
lambda ×1
lvalue ×1
polymorphism ×1
readability ×1
theory ×1
type-traits ×1
vb.net ×1