+ 1

Initializer list don't need parametric constructor?

Hi I thought classname obj{Val} is initializer list..... So, what is classname obj = {Val} Does second option i.e. with equal to call implicit constructor ? #include <iostream> using namespace std; class X { public: int x; explicit X(int x) : x(x){} }; int main() { X a = {10}; X b = a; cout << a.x << " " << b.x << endl; return 0; } Above code only work if I remove explicit keyword .... Also why it build without no parametric constructor as well ?

8th Feb 2021, 4:47 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
4 Respostas
+ 1
this "explicit" makes you unable to copy-initialization. You have to make it "X a(10)" and "X b(a)" so it is direct-initialization. You can use static_cast too, like "X c = (X)5"
22nd Feb 2021, 11:28 AM
Michal Doruch
+ 1
About implicit constructor, I'm not sure about that, but implicit constructor (copy constructor in this example) can actually work, try X a(10); //calling directly constructor X b = a; // copy constructor Idk if it works tho
22nd Feb 2021, 11:37 AM
Michal Doruch
0
I got your point , but does it not required to have parametric constructor ? Assignment will work as it is generated by default... Does parametric constructor also generated by default due to initializer list ?
22nd Feb 2021, 2:19 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
0
Not really, assignment is not generated by default. If you use inline constructor (generated by default), you have to assign values in class declaration like that: public: int x {0}; Then you do not need your own parametric constructor. Is it what were you asking for?
22nd Feb 2021, 6:59 PM
Michal Doruch