在 cpp 中使用单行操作序列时的性能

Performance when using sequence of operations in a single line in cpp

本文关键字:性能 操作 单行 cpp      更新时间:2023-10-16

>最近我开始从基础开始研究C++,并知道(令我惊讶的是)在某些情况下,我可以在一行中给出一系列用逗号分隔的表达式,如下所示

//it'll execute all the expressions mentioned after condition seperated by comma
for(int i=0;condition;++i,++x,cout<<"in for loop"<<endl,z = z*2);
(x>y)? ++z,z1 = z*2, cout<<"printing statement"<<endl:cout<<"condition failed"<<endl,z = z/2;

在这里,这工作后我感到困惑。以这种方式编码是否安全,或者以这种方式编码是否存在任何问题?

请澄清!!

如果我在任何地方都错了,请纠正我,我只是想知道为什么大多数程序员不使用这种方式(我在任何地方都没有看到过这种行)

逗号运算符,按顺序计算其每个操作数。 在标准语言中,左操作数和右操作数的计算之间存在一个序列点

在包含逗号运算符的表达式中,将丢弃左操作数的值,而表达式将采用右操作数的值。 在上面的两个示例中,逗号运算符用于void上下文中,因此不使用任何值。

因此,像这样的语句不使用逗号运算符的值:

exp1, exp2, exp3, exp4;

等效于以下语句序列:

exp1; exp2; exp3; exp4;

第一个示例等效于以下内容:

for(int i=0;condition;) {
++i;
++x;
cout<<"in for loop"<<endl;
z = z*2;
}

第二个例子:

if (x>y) {
++z;
z1 = z*2;
cout<<"printing statement"<<endl;
} else {
cout<<"condition failed"<<endl;
z = z/2;
}

请注意,这比单行版本更具可读性。 调试也更容易。 由于调试器通常一次单步执行一行代码,因此它会中断流并且更加精细。

不缩进和间隔代码在性能方面并没有降低成本。对于您和任何必须使用它的人来说,理解它是不可读的、令人困惑痛苦的。
很多人会更喜欢语法良好、美观且高效的缩进代码,而不是性能最佳的代码。您可以修改、调试和折射代码,这些代码可能不起作用,但具有可以理解的优点。
另一方面,很少有代码保持不变并且未读取。总有一天,某人,可能是你,将不得不再次阅读它,如果它看起来像你的OP,那将是非常昂贵的时间。

这是允许的。在我看来,如果没有参考,一般来说,其他程序员不会发现你的"for"循环非常可读。有时在 for 循环中,您想做其他事情,然后只需for (int i = 0; i < 10; ++i){"do something"}例如,在每个循环中用 2 递增"i"。阅读代码应该像阅读文本一样。如果你正在读一本书,你不希望它变得不必要的困难。

你的另一个问题是关于声明的安全性。代码的最大问题是您可能会对自己到底在做什么感到困惑。错误是由人为错误引起的(计算机是确定性的,并且正在执行最终由人类编写的机器代码),而有关安全性的问题主要取决于您如何定义它。

给你一些提示。当我刚开始编程时C++我看了很多关于CPP参考。我会给你一个链接,你可以在其中阅读语法和允许/可能的内容。在这个网站上,有很多关于各种陈述的例子。他们通常不会在一行中放置 5 或 6 个操作。如果要更改更多变量,则可能需要在 for 循环的范围内执行此操作,以便它比在 for 循环中更具可读性。

http://en.cppreference.com/w/cpp/language/for