Quick A: Initialize it using a lambda that’s invoked immediately.
Recently on SO:
Best practice for declaring variable without initialising it, so auto is unavailable
I want to declare two variables of the same type, and have the compiler figure out the types. However I don't want to initialise one of the variables until later. I don't think I can use
auto
here, so what's the best option?std::vector<int> v; // `start` and `end` should be the same type auto start = v.begin(); ??? end; // complicated code to assign a value to `end` (i.e. putting // the code in a function or using ?: is not practical here) if (...) { end = ...; } else { end = v.end(); }What's the best way to tell the compiler that
end
should be the same type asstart
, but without having to initialise the variable?auto start = v.begin(), end; // Doesn't work, `end` has to be initialised decltype(start) end; // Does work, but not sure if it's best practiceUpdate
A couple of comments have suggested ways that would work in certain situations, so I am clarifying my situation here:
std::vector<int> v; int amount = 123; // `start` and `end` should be the same type auto start = v.begin(); ??? end; // code to assign a value to `end` if (amount) { end = start + amount; amount = 0; } else { end = v.end(); }I believe a lamda function would be trickier here, because
amount
is being reset to0
afterend
is calculated, so in a lamda function that calculates a value forend
,amount = 0
would have to come after thereturn
statement. The only option would be to create more local variables, which would incur an (admittedly tiny) performance penalty.
Add a Comment
Comments are closed.