gpt4 book ai didi

c++ - 重载前缀/后缀编译器优化

转载 作者:太空狗 更新时间:2023-10-29 20:53:44 25 4
gpt4 key购买 nike

是否允许编译器优化重载的后缀运算符并将其替换为前缀运算符? (前提是编译器知道重载函数的作用)

例如,在下面的代码中,大多数编译器将i++ 视为++i 并生成相同的程序集。

for(int i=0; i<5; i++)
printf("*");

那么,同样适用于下面的代码吗?

class Integer {
int data;
Integer& operator++() { ++data; return *this; }
Integer operator++(int) { Integer ret = *(this); ++(*this); return ret; }
// And more overloads...
};

for(Integer i=0; i<5; i++)
printf("*");

最佳答案

优化器可以做任何,只要它不改变代码的行为。 (这称为 the "as-if" rule。)

是的,在您的第一个代码段中,++ii++ 将在大多数编译器上针对相同的内容进行优化。 (虽然以前不是这样,这就是为什么像我这样的老猫仍然在 for 循环中使用 ++i。)。

在您的第二种情况下,假设未使用返回的结果,编译器可以优化掉值拷贝作为命名返回值优化 (NRVO) 扩展的一部分。

关于c++ - 重载前缀/后缀编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com