前缀或后缀增量(或减量)的使用 我发现这个代码是C++语言中的逗号运算符用法的一个例子(C++入门,第五版):

前缀或后缀增量(或减量)的使用 我发现这个代码是C++语言中的逗号运算符用法的一个例子(C++入门,第五版):,c++,operators,C++,Operators,此循环在中的表达式中递增ix并递减cnt 标题的标题。每次通过时,ix和cnt都会发生变化 循环。只要ix测试成功,我们就重置 将当前元素设置为cnt的当前值 我说得对吗?还是我不明白这个练习的目的 < p>关于使用前缀或后缀增量操作符,你在这个例子中没有什么关系,但是C++底漆席也说,只有在真正需要的时候使用后缀版本作为最佳实践< /强>,我引用了第4.5章的书。递增和递减运算符 建议:仅在必要时使用后缀运算符 有C语言背景的读者可能会惊讶于我们在编写的程序中使用了前缀增量。原因很简单:前缀版

此循环在中的表达式中递增ix并递减cnt 标题的标题。每次通过时,ix和cnt都会发生变化 循环。只要ix测试成功,我们就重置 将当前元素设置为cnt的当前值


我说得对吗?还是我不明白这个练习的目的

< p>关于使用前缀或后缀增量操作符,你在这个例子中没有什么关系,但是C++底漆席也说,只有在真正需要的时候使用后缀版本作为<强>最佳实践< /强>,我引用了第4.5章的书。递增和递减运算符

建议:仅在必要时使用后缀运算符 有C语言背景的读者可能会惊讶于我们在编写的程序中使用了前缀增量。原因很简单:前缀版本避免了不必要的工作。它递增值并返回递增的版本。后缀运算符必须存储原始值,以便可以返回未递增的值作为其结果。如果我们不需要未加增量的值,那么就不需要后缀操作符所做的额外工作

对于
int
s和指针,编译器可以优化这些额外的工作。对于更复杂的迭代器类型,这种额外的工作可能会更昂贵。通过习惯性地使用前缀版本,我们不必担心性能差异是否重要。此外,也许更重要的是,我们可以更直接地表达我们项目的意图


是的,在我看来,在这个例子中,从前缀切换到后缀并没有什么不同。谢谢你的肯定。当不使用增量表达式的结果值时,一个好的编译器真的会生成不同的代码吗?@WiSaGaN也许大多数编译器都足够聪明,它们之间没有性能上的差异。但正如引文的第二部分所说,保持这种习惯没有坏处。因为问题是关于C++底漆练习,这至少可以解释作者对这个问题的看法。应用好习惯和理智的默认值总是一个好主意。从长远来看,这种小小的想法可以保持代码的可读性(前缀和后缀后面的语义),避免令人讨厌的陷阱(严重优化编译器、复杂类型等等)。@WiSaGaN:如果在不同的编译模块中定义了前置和后置增量运算符,编译器将无法知道它们的任何功能。因此,不允许用一个替换另一个。
vector<int>::size_type cnt = ivec.size();
// assign values from size...1 to the elements in ivec
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix, --cnt)
    ivec[ix] = cnt;
vector<int>::size_type cnt = ivec.size();  
// assign values from size...1 to the elements in ivec  
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix, --cnt)  
    ivec[ix] = cnt;