What does nothrow buy me?

Steven Schveighoffer schveiguy at gmail.com
Mon Nov 9 15:55:44 UTC 2020


On 11/8/20 6:53 PM, H. S. Teoh wrote:
> On Sun, Nov 08, 2020 at 10:00:28PM +0000, random via Digitalmars-d wrote: > [...]
>> When you call functions which potentially throw, the compiler has to
>> generate landing pads to handle exceptions if:
>>
>> 1. You have a catch block.
>> 2. You have to call destructors.
>>
>> This does not directly impact runtime performance but it bloats the
>> executable code (and it will probably impact runtime performance
>> because of caching).
> [...]
> 
> Nothrow functions can have exception handling code elided. So in that
> case it will not incur the runtime cost.

I think this is slightly incorrect. If you throw an Error inside a 
nothrow function, it will properly run destructors, and you can catch 
the Error inside the function.

I would say as well, if you catch an Error or Throwable resulting from a 
call to a nothrow function, it should always generate that handling 
code. But I think the spec is written such that it might elide the 
exception handling code (I don't see this ever happening).

The main case is when you *don't* catch Error or Exception when calling 
a nothrow function, and your code does cleanup via RAII, the cleanup 
will not happen.

-Steve


More information about the Digitalmars-d mailing list