未分类

c语言里的‘?’表达式

在c语言里面,‘?’表达式叫三相表达式。

一般来说,用三相表达式为某个值赋值比如int a = x > y ? x : y;

但是我试验了下,发现这个的具体作用为根据前面的表达式,执行后面的表达式,然后将表达式的值返回,这样就可以代替用if表达式,我自己测试了下,?表达式执行起来比if快,下面是我的测试代码:


int main()
{
    int tmp = 0;
    time_t start = clock();
    for (int i = 0; i < 1000; ++i)
    {
        for (int j = 0; j < 1000; ++j)
        {
            if (tmp == 0)
                cout << "hello" << endl;
        }
    }
    time_t pause = clock();

    for (int i = 0; i < 1000; ++i)
    {
        for (int j = 0; j < 1000; ++j)
        {
            tmp == 0 ? (cout << "hello" << endl) : 0;
        }
    }
    time_t end = clock();
    cout << (pause - start) * 1.0 / CLOCKS_PER_SEC << endl;
    cout << (end - pause) * 1.0 / CLOCKS_PER_SEC << endl;

    return 0;
}

最后的结果为

if
2.06178 2.04977
2.11626 2.05665
1.98943 2.01137
2.00973 2.01556
2.05302 2.03398
2.04722 2.04339
1.99004 1.99701

可以看出,这两者的相差并不是很明显。

然后,我们换一种测试方式:


int main()
{
    int tmp = 0;
    time_t start = clock();
    for (int i = 0; i < 1000; ++i)
    {
        for (int j = 0; j < 1000; ++j)
        {
            if (tmp == 1)
                cout << "hello" << endl;
            else
            {
                cout << "world" << endl;
            }
        }
    }
    time_t pause = clock();

    for (int i = 0; i < 1000; ++i)
    {
        for (int j = 0; j < 1000; ++j)
        {
            tmp == 1 ? (cout << "hello" << endl) : (cout << "world" << endl);
        }
    }
    time_t end = clock();
    cout << (pause - start) * 1.0 / CLOCKS_PER_SEC << endl;
    cout << (end - pause) * 1.0 / CLOCKS_PER_SEC << endl;

    return 0;
}

最后测试的结果为:

if
2.07589 2.02184
2.01759 2.00912
2.01515 2.02278
2.03697 2.02643
2.04685 2.02069
2.02305 2.02106
2.03817 2.07235

可以看出,其实,这个逼东西,玄学。压根就不知道哪个更快。但是我觉得这个看上去比较比较nb。

比如这样的:


height[left] >= left_max ? (left_max = height[left]) : ans += (left_max - height[left]);

这尼玛看着就帅啊。虽然没啥卵用,但是就这样吧。

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注