如果声明具有相同条件,则缩短

时间:2017-07-06 21:11:22

标签: c++ if-statement

有没有办法缩短这样的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.min.js"></script> <div class="survey-results" id="lppresults"> <button id="generatereport">Download Report</button> TEST CONTENT </div>语句:

<击> if

修改:不便之处,敬请原谅。在我的手机上快速完成了。这是一个完整的例子:

这是我的连线四肢游戏的一部分。

if(x == 1 && y == 1 && z == 1) -> if((x && y && z) == 1) or if((x,y,z) == 1)

3 个答案:

答案 0 :(得分:2)

实际上,如果你使用C++11或更高,你可以做一些缩短:

#include <iostream>
#include <string>
#include <tuple>

int main() {
    int x = 1;
    std::string y = "Hello";
    double z = 3.14;

    if(std::make_tuple(x, y, z) == std::make_tuple(1, "Hello", 3.14))
        std::cout << "Everything is okay." << std::endl;
    else
        std::cout << "Something went wrong." << std::endl;

    return 0;
}

或者您的情况(如果您的变量类型为int):

if(std::vector<int> { x, y, z } == std::vector<int> { 1, 1, 1 })
    std::cout << "Everything is okay." << std::endl;
else
    std::cout << "Something went wrong." << std::endl;

但请记住,当您必须同时测试多个输入时,这些技术会很方便,或者您必须为您的类型重载comparison operators。在你的例子中(正如评论所指出的那样)这是不必要的,x == 1 && y == 1 && z == 1是微不足道的。

编辑完问题后,很明显您打算使用对象(std::string)进行比较。在这种情况下,每次进行比较时将它们复制到std::tuple或数组中将会发生严重的性能损失。

if语句中的表达式相比,不会产生显着的开销,您可以使用variadic templates,如下所示:

template<typename T, typename... Args>
bool equalToAll(T&& test, Args&&... args) {
    bool result = true;
    bool dummy[] { false, (result &= (test == args))... };
    return (static_cast<void>(dummy), result);
}

// Usage:
// equalToAll(player, grid[i][j], grid[i + 1][j], grid[i + 2][j], grid[i + 3][j])

此示例使用 list initializer 执行参数包扩展,您可以阅读更多herehere

答案 1 :(得分:1)

如果要检查所有变量是否彼此相等,可以编写这种帮助

template <typename T>
bool all_equal(const std::initializer_list<T>& l) {
    return std::equal(l.begin() + 1, l.end(), l.begin());
}

用法:

if (all_equal({a, b, c})) 

在线版:http://ideone.com/8OC1yq

答案 2 :(得分:-3)

如果您将int数据存储在数组中,则可以执行包含检查并将if语句设置为单个条件。