C++ 17:保证的复制Elision不起作用

问题描述 投票:0回答:1
我正在在C ++ 17及以后获得以下输出...

Constructor called Copy Constructor called
E17保证的副本说明了

"Copy elision is mandatory in Throwing and catching exceptions by value"

。我将
"Copy Constructor called"
作为输出。

我错过了什么?

    

副本的省略是必须在抛出和捕获异常的情况下进行的。

yes,这是正确的,这是按预期工作的 - 当调用
c++ c++17
1个回答
1
投票
时,编译器保留一个内存,如果wring thr threxection,则将构建
Error

。在C ++ 17之前,它可以创建

test()
并将其复制到保留的存储中。

您观察到的副本在此处完成:

Error
-
catch (Error e)
从保留存储中复制到局部参数。如果您不想复制一个对象,请修复它:
Error
catch (Error &e)

catch (const Error &e)

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.