帮忙看下这个问题
对于循环里的临时变量问题,我一直认为是把临时变量放在循环体外效率会高,可以节省构造与析构的时间。但这次做了测试发现,情况与我认为的刚好相反。
本例使用Qt的QTransform,就是一个矩阵的类做乘法运算,两段代码的执行效率,是在循环体内定义临时变量的效率高.当然是直接将乘法结果赋给临时变量的情况.
无论打开还是关闭优化,还是加上-g去掉-g,都是一样的结果.
有人详细的解释一下么,C++primer里说过这个问题,但不是太明白.
- [iscs@linux-sp1]:/users/iscs/test>$ cat qmain.cpp
- #include <QtGui/QTransform>
- int main(int argc, char* argv[])
- {
- const QTransform m1(1.3, 424, 643, 545, 2234, 13.4, 123, 678, 98);
- const QTransform m2(1.3, 424, 643, 545, 2234, 13.4, 123, 678, 98);
- #ifdef TEST
- for(int i=0; i<10000000; ++i)
- {
- QTransform ss = m1*m2;
- }
- #else
- QTransform ss;
- for(int i=0; i<10000000; ++i)
- {
- ss = m1*m2;
- }
- #endif
- return 0;
- }
- [iscs@linux-sp1]:/users/iscs/test>$ g++ -m32 -I/users/iscs/qt/include/ -L/users/iscs/qt/lib -lQtGui -o ss qmain.cpp -O2 -DTEST
- [iscs@linux-sp1]:/users/iscs/test>$ time ./ss
- real 0m0.518s
- user 0m0.504s
- sys 0m0.004s
- [iscs@linux-sp1]:/users/iscs/test>$ g++ -m32 -I/users/iscs/qt/include/ -L/users/iscs/qt/lib -lQtGui -o ss qmain.cpp -O2
- [iscs@linux-sp1]:/users/iscs/test>$ time ./ss
- real 0m0.625s
- user 0m0.616s
- sys 0m0.000s
- [iscs@linux-sp1]:/users/iscs/test>$
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
建议看看每次循环 缺省构造、拷贝构造、析构函数的执行次数
这里是直接调用构造函数,类的初始化。
复制代码这里是调用类的重载运算符“=”,是不一样的,估计不同效率在这里。
回复 3# sigmalha
回答正确。佩服佩服.