1
hello2060 2020-11-22 18:16:08 +08:00 via iPhone
很久没有搞 c++已经想不起来了,你这个 getex()对吗,确定这种写法没啥问题?
|
2
hello2060 2020-11-22 18:16:47 +08:00 via iPhone
我是只直接返回一个栈上对象
|
3
hello2060 2020-11-22 18:19:56 +08:00 via iPhone
如果可以的话看看有编译器优化吗
|
6
twoconk 2020-11-22 18:44:37 +08:00
楼上是正解,实际项目中通常返回堆内存,RVO 即返回值优化,可以少做一次拷贝构造。
|
7
zhuangzhuang1988 2020-11-22 18:54:50 +08:00
这个直接看 <深入理解 C++对象模型>
里面有很多关于 这样的题目 怎么重写 |
8
sfqtsh 2020-11-22 19:23:57 +08:00 via Android
|
9
nightwitch 2020-11-22 19:36:26 +08:00
触发了编译器优化呗,不一定是 RVO,有可能 get_ex()函数整个都被 inline 了,实际上的函数体是
int main(){ excption_test m; return 0; } |
10
nightwitch 2020-11-22 19:44:55 +08:00
在 g++10.2,开最高级别的优化,你的代码实际上被编译成了
int main() { std::cout << "in constructor\n"; std::cout << "auto in destructor??\n"; return 0; } 见 https://godbolt.org/z/14o3WY |
11
0x11901 2020-11-24 16:17:28 +08:00
@nightwitch 编译器比我会写代码系列
|