gpt4 book ai didi

c++ - 成员函数中的临时变量 - C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:10 24 4
gpt4 key购买 nike

在将一些代码投入工作后,我正在尝试对其进行优化。我试图避免的一件事是创建临时对象。给定一个类

class foo{
private:
int a;
public:
foo(int sa):a(sa);
~foo(){}
inline int multiply(int b) {return a*b;}//temporary?
};

intel 编译器给我这里使用的临时创建/引用临时。是否创建了任何临时变量?

编辑:编辑返回类型。另外,我认为在 multiply 中没有创建临时变量,但英特尔编译器给我一个错误。

编辑 2:在下面的请求之后,这里是英特尔编译器 v.12 给出错误的完整代码:

 #include <iostream>
#include <complex>

using namespace std;
const double pi = 3.1415;
const complex <double> I = (0.0,I);
const complex <double> oneover2piI = (1.0 / (2.0 * pi * I));

class foo{
private:
complex <double> a;
public:
foo(complex <double> sa):a(sa){}
~foo(){}
inline complex <double> multiply(complex<double> b)
{return a*sqrt(b);}
};

编译行是

  icc -g -O2 -w2 -debug parallel -Wcheck -Weffc++ -mp -fp-stack-check -wd981 -wd2015 -wd1418  test.cpp -o  test

结果警告是

  test.cpp(7): remark #383: value copied to temporary, reference to temporary used
const complex <double> oneover2piI = (1.0 / (2.0 * pi * I));
^

问题是理解编译器在犹豫什么,而不是胡说八道。

谢谢!

最佳答案

别担心。

您所做的称为“过早的微优化”,它是 root of much evil .

尝试微观优化在很大程度上也是徒劳的

  1. 在没有先分析代码和确定需要优化的地方的情况下进行微优化完全是浪费时间。您可能最终会从需要数百万皮秒的例程中削减皮秒。何必呢?

  2. 编译器会比您更好地优化您的代码。例如,微软有一个团队,他们唯一的工作就是在优化器上工作。他们是非常聪明的人,每天整天都在寻找优化代码的方法。在这种情况下,临时对象通常会被优化掉。让他们做他们的事。他们比你更擅长。

  3. 微优化通常是以更难理解代码为代价的。难以理解的代码更容易出现缺陷。如果您的函数返回“fA@#zzzzzzz”而不是“foo”,那么您节省的那 4 皮秒就毫无值(value)。

首先,为您的任务选择正确的算法。然后编写实现这些算法的良好、健壮的代码。第二个 Release模式下的配置文件。在分析器的指导下,找到真正需要优化的地方,如果有的话。然后优化。

关于c++ - 成员函数中的临时变量 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522211/

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