Is there a way to still effectively use the member initialization list when there's if-statements inside your constructor? I am doubtful but thought I'd ask anyway.
class Thing {
public:
Thing(const std::string& sp)
{
if (something_special_about(sp))
{
a = 2;
s = "none";
}
else
{
a = 0;
s = sp;
}
}
private:
int a;
std::string s;
);
In C++11 you can apparently call ctors from other ctors, but by the time you call the other ctor, wouldn't things already be default initialized, defeating the point?
The best way would be to have the 'normal' values for the variable being in the member initializer, and then an if statement inside the body to change it otherwise. As in your example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Thing {
public:
Thing(const std::string& sp)
: _a(0), _sp(sp)
{
if (something_special_about(sp)) {
_a = 2;
_sp = "none";
}
}
private:
int _a;
std::string _sp;
};
As for what's called 'delegating constructors', that involves only if you have multiple constructors that you want to do the same thing for. It removes the need for an init() function or the like. For a small example, see https://isocpp.org/wiki/faq/cpp11-language-classes#delegating-ctor