是否有像代码那样的理解/可维护性问题
inVar1 == 0 ? NULL : v.push_back(inVar1);
inVar2 == 0 ? NULL : v.push_back(inVar2);
Run Code Online (Sandbox Code Playgroud)
等等.
可能令人困惑的想法是使用三元运算符来进行程序流而不是变量赋值,这是通常的解释.
我没有看到解决这种用法的工作中的编码标准,所以虽然我很乐意这样做,但我想知道是否有充分的理由不这样做.
And*_*ant 35
我认为阅读比单纯打字更令人困惑和困难;
if (inVar != 0)
v.push_back(inVar);
Run Code Online (Sandbox Code Playgroud)
我不得不多次扫描你的例子,以确定结果会有什么确定性.我甚至更喜欢单行if(){}语句而不是你的例子 - 我讨厌单行if语句:)
Bil*_*ard 10
我认为应该避免这种情况.您可以在其位置使用1行if语句.
if(inVar1 != 0) v.push_back(inVar1);
Run Code Online (Sandbox Code Playgroud)
这些天的编译器会像三元运算符一样快.
您的目标应该是让其他软件开发人员阅读起来有多容易.
我投票支持
if ( inVar != 0 )
{
v.push_back( inVar );
}
Run Code Online (Sandbox Code Playgroud)
为什么括号...因为有一天你可能想在那里放一些其他的东西,并且为你预先设置了括号.如今,大多数编辑都会把它们放进去.
正如评论中提到的那样,这不是有效的C++.例如,GCC将在此代码上发出错误:
error: `(&v)->std::vector<_Tp, _Alloc>::push_back [with _Tp = int, _Alloc =
std::allocator<int>](((const int&)((const int*)(&inVar1))))' has type `void'
and is not a throw-expression
Run Code Online (Sandbox Code Playgroud)
但是,这可以通过强制转换来解决:
inVar1 == 0 ? (void)0 : v.push_back(inVar1);
inVar2 == 0 ? (void)0 : v.push_back(inVar2);
Run Code Online (Sandbox Code Playgroud)
但是以什么代价?为了什么目的?
在这种情况下,这不像使用三元运算符更简洁而不是if语句:
inVar1 == 0 ? NULL : v.push_back(inVar1);
if(inVar1 != 0) v.push_back(inVar1);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2211 次 |
最近记录: |