首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泰纳手术治疗3例

泰纳手术治疗3例
EN

Stack Overflow用户
提问于 2021-08-27 09:21:53
回答 2查看 104关注 0票数 0

对不起,这个问题..。我想要user ternar操作符for和if else语句。我想问一下,是否需要像示例2那样使用方括号,或者示例1可以吗?我知道两者都编译..。谢谢。

代码语言:javascript
复制
#include <iostream>

using namespace std;

int main()
{   
    int x2;
    if (x == 14)
    {
        x2 = 10;
    }
    else if (x == 14)
    {
        x2 = 140;
    }
    else
    {
        x2 = 0;
    }
    
    int x = 14;
    // example1
    auto x2 = x == 10 ? 100 : x == 14 ? 140 : 0;
    // example2
    auto x2 = x == 10 ? (100 : x == 14 ? 140 : 0);

    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2021-08-27 09:36:09

加上括号只是为了增加三元操作符的清晰度。如果将代码放在正确的位置,则不应影响代码流。

这里没有方括号,其含义仍然与以下所示相同:

代码语言:javascript
复制
x2 = x == 10 ? 100 : x == 14 ? 140 : 0;

在这里,我尽可能多地放括号。

代码语言:javascript
复制
x2 = (x == 10) ? (100) : ((x == 14) ? (140) : (0));

虽然这些括号对用户来说是清晰的,但过度使用它们可能会使阅读变得复杂,我的看法是按以下方式编写它

代码语言:javascript
复制
x2 = (x == 10) ? 100 : ((x == 14) ? 140 : 0);

所有这些都意味着

代码语言:javascript
复制
if (x == 10) {
    x2 = 100;
} else {
    if (x == 14){
        x2 = 140;
    } else {
        x2 = 0;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2021-08-27 10:02:05

当您需要更多的比较时,您可以这样做(我为自己做了一个节选,所以不是真正的答案):

代码语言:javascript
复制
#include <cassert>
#include <map>

template<typename type_t, unsigned int N>
constexpr type_t n_ary(const type_t& value, const type_t& default_value, const std::pair<type_t, type_t>(&options)[N])
{
    for (const auto& option : options)
    {
        if (value == option.first) return option.second;
    }
    return default_value;
}

int main()
{
    auto x= 8;

    // x = is your value
    // 0 = default value if nothing matches
    // per pair, first is the value to match, second is value to return
    auto x2 = n_ary(x, 0, {{ 10,100 }, {14,140}, {8,42}, {6,36}});
    assert(x2==42);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68951014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档