void fct2(const int& x); // bad: overhead on access in fct2()
void f4(const int& x); // bad: overhead on access in f4()
For advanced uses (only), where you really need to optimize for rvalues passed to "input-only" parameters:
For advanced uses (only), where you really need to optimize for rvalues passed to "input-only" parameters:
@ -7259,7 +7259,7 @@ The members of a scoped object are themselves scoped and the scoped object's con
The following example is inefficient (because it has unnecessary allocation and deallocation), vulnerable to exception throws and returns in the `...` part (leading to leaks), and verbose:
The following example is inefficient (because it has unnecessary allocation and deallocation), vulnerable to exception throws and returns in the `...` part (leading to leaks), and verbose:
void some_function(int n)
void f(int n)
{
{
auto p = new Gadget{n};
auto p = new Gadget{n};
// ...
// ...
@ -7268,7 +7268,7 @@ The following example is inefficient (because it has unnecessary allocation and
Instead, use a local variable:
Instead, use a local variable:
void some_function(int n)
void f(int n)
{
{
Gadget g{n};
Gadget g{n};
// ...
// ...
@ -10971,7 +10971,7 @@ In such cases, "crashing" is simply leaving error handling to the next level of
##### Example
##### Example
void do_something(int n)
void f(int n)
{
{
// ...
// ...
p = static_cast<X*>(malloc(n,X));
p = static_cast<X*>(malloc(n,X));
@ -10981,7 +10981,7 @@ In such cases, "crashing" is simply leaving error handling to the next level of
Most systems cannot handle memory exhaustion gracefully anyway. This is roughly equivalent to
Most systems cannot handle memory exhaustion gracefully anyway. This is roughly equivalent to
void do_something(Int n)
void f(Int n)
{
{
// ...
// ...
p = new X[n]; // throw if memory is exhausted (by default, terminate)
p = new X[n]; // throw if memory is exhausted (by default, terminate)