watched this earlier today and have just written my first constructor initializer list i confess, i'm feeling pretty gangster right now
@DaRealPielover19877 жыл бұрын
Hey Cherno. Just want to say that this series is one of the best I've seen on youtube. I've been in the industry for about a year now but having refreshers like these are always good. Like I haven't actually thought about why I use member initializer lists in years since I've just gotten in the habit of doing so. I'm looking forward to more videos so that I can fully recommend this series to more novice programmers.
@chromoxd795821 сағат бұрын
*Charno
@Plasticcaz7 жыл бұрын
I didn't realize this actually had performance benefits. When I first saw them, I thought they were just a nifty way of writing constructors.
@mryup61004 жыл бұрын
Exactly, needs better documentation.
@1Naif7 жыл бұрын
Also you cant initialize *const* members without using "Member initializer".
@SrogaPoziomka6 жыл бұрын
I was going to write same thing. :)
@annahakobian73715 жыл бұрын
if I'm not mistaken reference types also must be initialized in the initializer list
@venkateswarans10125 жыл бұрын
What about static .?
@patrikjankovics21135 жыл бұрын
@@venkateswarans1012 Well, those will be initialized by default I think, because you can access them without creating an object
@jatinchadha77404 жыл бұрын
Basically all members which should be initialized at time of declaration should be written in initializer list like const , references etc.
@drkerberos3 жыл бұрын
Mind blown @The Cherno. As I said in a earlier video and will say now you are the best C++ teacher and course on KZbin. To the way you describe subjects to asking the biggest question of why you would need to use them and giving an example. To be honest I thought I would never be able to learn programming and actually learning the materials until I went to college and forced myself but I was wrong. I wish I found this channel sooner than I did. Big props to you though in helping everyone and making this playlist. I can't wait to learn more from the rest of the videos and then try and make a simple project later on.
@LoxagosSnake6 жыл бұрын
Lost it at the closed captions. "Hello guys my name is a cheddar"
@FoxSensei6 жыл бұрын
Cheddar Bob
@olliert48405 жыл бұрын
@@nijucow i ALWAYS hear: " My name is 'Ocherno' "
@tedchirvasiu3 жыл бұрын
I always hear it: "My name is the Cyano"
@hexi30644 жыл бұрын
Member Initializer List allows you to use references as properites of a class. (Without using it, you cannot do it because references has to have assigned values while being created.)
@joshs24757 жыл бұрын
Don't forget Member Initializer Lists can also be used for initializing const member variables as well!
@deltarambo62304 жыл бұрын
Basically, all data-members which should be initialized at time of declaration, such as const , references, etc., must be included in the constructor's initializer list.
@lucha62624 жыл бұрын
This video should come before the virtual functions video!
@lucha62624 жыл бұрын
Greatgreat video though, I will forever use this from now on!
@zfighter37 жыл бұрын
Holy cow. It's like a constant stream of videos!! I use some of your videos as reference for my high school classes. Cheers!
@GreenFlame163 жыл бұрын
Cherno makes both C++ and teaching C++ look easy Heck, been reading some Stanley Lippman and that dork just sux ass explaining, and the book is a fucking minotaur maze. While Chemo makes it crystal clear and enjoyable. I just feel like I'm having a great company and we speak same language. I feel so much better watching these. Thank you, Cherno, you bring a lot to this world
@b_01_aditidonode436 ай бұрын
amazing explaination and that is amazing effect there when you said like and the like button actually glowed , woah mindblown
@legendarytwister36566 ай бұрын
i didnt know that. thanks, ive watched alot of your videos you are doing great work. cheers
@TheKingofkatz5 жыл бұрын
Incredible video series that will remain relevant for years to come. Nice work man, appreciate it.
@passionfruit76172 жыл бұрын
confirmed
@mytech67792 жыл бұрын
Should use uniform initialization '{}' instead of '()' because it will warn on implicit narrowing conversions. '()' will silently allow, for example, an int to be truncated to a char. So this is better public: Entity() : m_Name{"Unknown"}, x{0}, y{0}, z{0} { std::cout
@mamoudgad4210 Жыл бұрын
I just want to thanks for this great content one of the best c++ courses on KZbin
@allenvicencio51567 жыл бұрын
Wanted to say thanks! Your videos are great and are a huge help to me in understanding C++.
@BOTHLine7 жыл бұрын
First of all really thank your for all the videos. Even though the most concepts may be known by a lot of people already, it's interesting to see what happens behind the scenes. For example the Initializer lists. I knew they would be better in terms of performance in some situations.. but I never actually knew why and when especially. I didn't even feel the need to look it up. But I just like to know things like those, so these videos are really interesting and helping me out! And I like it, you are not discriminating primitive types nor classes!
@Karolis5547 жыл бұрын
and also Initializer list is helpfull when you have to initialize "const" variables/objects inside a class, because you can't overwrite const objects with "=" operator :)
@deltarambo62304 жыл бұрын
Basically, all data-members which should be initialized at time of declaration, such as const , references, etc., must be included in the constructor's initializer list.
@TheSunscratch7 жыл бұрын
Photo on the wall is awesome!
@BlackJar727 жыл бұрын
Yay! I finally am back online and can catch up with these awesome videos!
@farsanrashid56016 жыл бұрын
Great work! I would like add two things though, I am not really sure why 2:48 "make sure you always initialize your variables in the same order that they are declared in when you declared them as members" If the order of initialization only matters on the order of member declaration when using initialization list it should not matter in which order I initialized them, it would matter if I had not used initializer list and initialized inside curly braces. Second the main reason that initialization by list is better is that it only calls the constructor but if I initialize inside curly braces a copy assignment is performed after the constructor. Scott meyers 55 ways item 4. Again keep up the good work.
@touchdepp45072 жыл бұрын
You just keep the order the same as your members to not confuse yourself. Try something like Entity:m_x(5),m_y(m_x+1) and flip the order.
@turdle69420 Жыл бұрын
i mean, he explicitly states that it could mess up depending on the compiler. and feels like he's mostly encouraging this for good practice.
@yavuzselimcagan52332 жыл бұрын
It's really good to learn that.
@dhu10903 жыл бұрын
YOU ARE AMAZING!
@MiddleCross3784 жыл бұрын
Thank you, exactly what I was looking for.
@samarthsrivastava62206 жыл бұрын
@TheChernoProject Man! You rock!!!. I was having trouble understanding this but you made it so simple with ur examples. Thanks!
@gamelovers4974 Жыл бұрын
You are the best cherno.
@toast_on_toast12702 жыл бұрын
Love you man, C++ for life
@matt-g-recovers3 жыл бұрын
Very cool, I like this style vs Java
@teosurch8 ай бұрын
Thank you! Finally got the new constructor syntaxis ( a(a1) like instead of this->a = a1 );
@asterisk44242 жыл бұрын
Dude thank you so much I love your videos
@h.hristov7 жыл бұрын
Thanks for the daily uploads :D
@meelz8122 жыл бұрын
Cherno does not miss
@georgei24803 жыл бұрын
Mr. Cherno . You are my hero
@wearyadventurer4043 жыл бұрын
"hey little guys my name is a chadder and welcome back to my say plus plus series" xD
@ghostradiodelete7 жыл бұрын
"if we....were to....move this...." haha thanks William Shatner, that was very helpful. In all seriousness though I really dig these videos and am looking forward to the opengl series.
@DaemonJax2 жыл бұрын
You didn't mention that you can also give the intializer list a private static function to initialize a member variable. Sometimes you need to do something more complicated than just a simple assignment. Maybe that's a new language feature in 14, 17, or 20. Dunno. You can also give it a constructor for a nested class or whatever. The initializer list is kinda clunky tbh but I feel forced to use it, but the only real downside is that when using the initializer list AND you want to use the constructor for other things to set up the class without using a secondary manually called init function, you're FORCED to implement it in the header instead of the source file so you can't hide the implementation details... holy run-on sentence, Batman. That's a weird design decision... flaw, if you ask me. Some other stuff is also weird... like you can't use a static function for array initialization in the initialization list. You. Just. Can't.
@eruston6 жыл бұрын
Great video, very easy to understand, bought the book: ‘effective c++ third ed.’ Great compliment to that book.
@stormwaker6 жыл бұрын
I cannot think of another KZbinr with such a high likes to dislikes ratio under his videos. Is this how perfection looks like?
@filippovolpe7464 жыл бұрын
Doesn't "... :m_Example(Example(8)) ..." Implicitly use the copy constructor? It hasn't been overloaded with a cout so it doesn't appear in the terminal.
@adrianhurtado83233 жыл бұрын
Thank you for this!
@Nick-lx4fo4 жыл бұрын
Thank you
@ymahmoodi58174 жыл бұрын
Some think that I do not understand is that even after moving m_Example(8) in to initializer list, the Example m_Example is still in line 22, and as Cherno said, because it is in member region it does not mean that it will nor run and create an instance. So, why now does not create an instance!
@smileynetsmileynet79224 жыл бұрын
So far, I've left initializers out of pnfha, because what I would have had the option to do is make a function with 2 bodies. Maybe it wouldn't be that way later in development though...
@pawankumarmeena67376 жыл бұрын
you are my hero
@qandos-nour4 жыл бұрын
thank you you are the best
@amrtcpp62034 жыл бұрын
thanks man , you save me
@prometheus84395 жыл бұрын
you deserve as much as subscribers as PewDiePie
@AdityaPrasad0075 жыл бұрын
3:17 why why!! thank you for asking that. wow... performance issues. good enough for me.
@varuntaneja70734 жыл бұрын
You used this in one of your previous videos (maybe the virtual functions) and I was so damn confused . ps : I get it now
@ashtonkusmaul6907 Жыл бұрын
what if you used like std::string& then would it still douplicate it
@mryup61004 жыл бұрын
This is amazing. Code changer for sure y'all!
@BernardoSOUSAstudent4 жыл бұрын
That.... was totally new to me.
@ohmnamo70564 жыл бұрын
wow ...gr8 explanation.....thanks a lot...
@donovantheprogrammer29894 жыл бұрын
I'm a bit confused about 4:10. You're saying the member will be constructed twice: once in the default constructor, and again with the "Unknown" string value. Where I'm confused is that the default constructor is already being used in your example to set the string to "Unknown" already. So is there a second "hidden" default constructor some where else?
@zoeres4 жыл бұрын
So, to explain it as best I can: Every class has a default constructor. If you don't implement one on your own there will be an empty one there. Every member class variables that an object has are instantiated via default constructor when the object is instantiated, that is before the code inside of that object's constructor is ran, but after it's initializer list, unless initialized already. If you've hidden the constructor of the class you are initializing (by making it private or protected), or if you have member variables that are constants or reference types you have to initialize them either in the initializer list or in their declaration (doing it at declaration time doesn't allow you to pass them any parameters so be wary of that).
@leixun4 жыл бұрын
*My takeaways:* Why should we use member initializer lists 3:10: clean code and speed advantage
@dr3mro5 жыл бұрын
we need a series of wxwidgets :)
@joseponce62503 жыл бұрын
brillant!!
@ilyosbeknajmiddinov67542 жыл бұрын
Hello I have a question can we use c++ for web application's the part of backend ? can you teach how to create web-backend or desktop applications or how can we use c++ for mobile (some percentage) please give me answer.
@AviPars2 жыл бұрын
Look at webassembly
@TKcKoucher2 жыл бұрын
Would it be correct to use member lists to initialize variables in a struct? I'm using a struct to group a bunch of variables (integers, small arrays, etc.) that are going to be filled with data once I read a binary file using .read() from std::ifstream. Even in this case, should I be using a member initializer list instead of initializing these variable inside the constructor?
@vyomraj33894 жыл бұрын
Wow thanks!
@reguret29762 ай бұрын
you can't initialize const and reference members without the initializer, ty for the vid very helpful :)
@krec3487 жыл бұрын
YES! DAILY VIDEOS :D
@lightps5515 Жыл бұрын
What is the downside of initializing a variable in the header instead of the constructor especially for the primitive data types?
@NeZversSounds4 жыл бұрын
Another frustration explained!
@johnk65983 жыл бұрын
Would default arguments be another way to accomplish this?
@serkanozturk42172 жыл бұрын
Personal Notes: - Way of constructing objects by assigning members values - Not only a coding style, if you don't use that you initialize objects twice , one when declaring the member, and the other one when assigning it to a different object again inside constructor which takes parameters
@desrucca3 жыл бұрын
6:39 What if theres another Constructor for Entity which takes Example object as a parameter , and i want to define m_Example as the Example object on the parameter. the code, looks like this Entity(Example x) : m_Example(x) {} Is it possible? Or is it gonna throw error instead? If it is possible, what if the Example class also has constructor that takes Example object as it parameter ( Example(Example e) {} ) ?
@rajakandukuri85094 жыл бұрын
this nice trick made me get rid of heap alloc.
@tessa100015 жыл бұрын
amazing, thanks
@adamhendry945 Жыл бұрын
Can you please do a video on padding and alignment as well as the pIMPL idiom?
@SruVekDiaries6 жыл бұрын
Ur videos are awesome bro..Keep it up...u r genius
@Strikerz0r7 жыл бұрын
I don't quite get it. Is this just if you use an overloaded constructor in addition to the default constructor? Or should you just use it always?
@barellevy60306 жыл бұрын
Appreciate you! Great content! Thank you!
@l3aIIin235 жыл бұрын
Thanks!
@cubedude76 Жыл бұрын
Is this also how I should be initializing struct members variables?
@chiyungchu94633 жыл бұрын
Why not immediate initialize them inside the class instead of inside constructor?
@wsk31847 жыл бұрын
What if I want to initilize some member object based on some condition? E.g. class Test{ private: Object a; public: Test(int b) { if (b > 0) a = Object(b + 10); else a = Object(b - 10); } } Based on what You said Object will be created twice. Can this be avioded is this example?
@mikhailsobol38957 жыл бұрын
In this particular case, you can use ternary operator Test(int b) : a(b > 0 ? Object(b + 10) : Object(b - 10)) {}
@Rob-nx1dz7 жыл бұрын
Test(int b) : a(b > 0 ? b + 10 : b - 10) { } should work I think
@wsk31847 жыл бұрын
Sure, but what if the condition is more complex ? Additional else if.
@Rob-nx1dz7 жыл бұрын
for really complex conditions i think there is no way but nesting those one-line-ifs... at least I can't think of anything better
@Trogzul7 жыл бұрын
Like many other have mentioned, you can use the ternary operator. If the condition is really complex, you can use a lambda (Which he hasn't covered in depth yet), or just create a function, example: hastebin.com/omaliderat.cpp I personally would prefer just using a function rather than a lambda in most cases, but that depends on the situation.
@alexisreynolds42774 жыл бұрын
I just realized his voice sounds exactly like the character Lawrence (Prince Naveed's butler) in the Disney movie, the princess & the frog.
@AviPars2 жыл бұрын
Please do a video kn std containers. Lists and algos like for each
@jubranoo4 жыл бұрын
what does const std::string& GetName() means? why did we put the & sign in the return type ?
@jubranoo4 жыл бұрын
@Peterolen can we say that all what references do is to avoid unnecessary copies ?
@sunitjoshi35733 жыл бұрын
Wouldn’t this be an issue since any changes to the “outside” string will cause changes in the initialized class? Is the normal, copy-Val a safer option for classes?
@1tsyB1tsy4 жыл бұрын
Loving your videos but the room your recording in has a nasty resonance at 2kHz -4kHz, consider some acoustic dampening panels!
@VanBhardwaj3 жыл бұрын
they are 3 years old. This won't help now :P
@imninja42205 жыл бұрын
in short, constructors assign the variables to a new value while member initialiser list simply initialise them
@flecko52 жыл бұрын
Good summary
@popplestones8862 жыл бұрын
Do you use inititializer lists just with constructor or can / should you use on regular functions?
@hpsmash773 жыл бұрын
i can hear a robot talking in background lol confirmed cherno is not a human
@freddy73044 жыл бұрын
great video but i had to turn the play back speed down. For 4:35 onwards you just put it in turbo mode and blew by it. a little confusing...
@anton_98 Жыл бұрын
I am quite sure, that if you try this in Release mode, then you get the same result with init list and without.
@sruthisrinivasan36223 жыл бұрын
I just have a doubt here! when there were two classes example and entity. You called example from entity. Don't you need to override?
@waiitwhaat2 ай бұрын
"I don't discriminate between primitive type and class type" I'll cheers to that. (I code in Python)
@xr_xharprazoraxtra54282 жыл бұрын
🔴HELP : I have 3 constructors : a default constructors with no parameters, a constructor with a parameter, and a copy constructor the constructor with the parameter works fine. the copy constructor works fine, but for the default constructor, C++ says "expression must have class type but it has type "ClassName (*)()"" what is going on and how to fix it ?
@我有一个朋友-i2u4 жыл бұрын
Today's hair is also just perfect.
@Anton-sz6ef3 жыл бұрын
Why not do this ? struct exemple{ exemple(int x){ nr n(x); } }; Can someone explain ? I know this is old. Also, nr just has a constructor that gives some number the value x, like in the video...
@rachelvanderlely6324 Жыл бұрын
why do you pass it in by reference into the constructor?
@meh16727 жыл бұрын
These video's are the best! :D
@MrDivad0066 жыл бұрын
5:55, this is so confusing. Why would it run that code before the code in the constructor?
@Netrole4 жыл бұрын
It runs the code so the variables you are assigning values to in the constructor actually exist
@chrispanov81676 жыл бұрын
Hey Cherno, i have a question. Why can't i do this (no pun intended here haha): Entity(int x, int y) : this->x(x), this->y(y) {} So that's my constructor. And when i use a member initializer list with the this function it gives me an error "expected an identifier"
@linternetsansfil41524 жыл бұрын
I tried using = and { }, = doesn't works, but { } does, why should we use ( ) ? We generally use { } for initialisations.
@linternetsansfil41524 жыл бұрын
@Artem Katerynych I said I do, my question is why we use ( ) for members initializer list.
@linternetsansfil41524 жыл бұрын
@Artem Katerynych I said I do "= doesn't works, but { } does" that's the second time you don't read properly :/ ...
@marvel4384 жыл бұрын
Too awesome.
@cooltuque3 жыл бұрын
If the default constructor initializes a member variable to some default value. Wouldn't it be simpler to just assign the default value when declaring it?
@sergeyklassen96967 жыл бұрын
Great video! Did you change the audio settings? Sounds different.