CONDITIONS and BRANCHES in C++ (if statements)
HTML-код
- Опубликовано: 2 окт 2024
- Twitter ► / thecherno
Instagram ► / thecherno
Patreon ► / thecherno
Today we're going to be taking a look at conditions and branches in C++, which basically means if, else if, and else statements. This is an important part of logical programming where we decide to execute certain blocks of code depending on a certain condition. We go pretty in-depth in this video so make sure you watch until the end!
Linked Videos:
Debugging ► • How to DEBUG C++ in VI...
How the C++ Compiler Works ► • How the C++ Compiler W...
Variables in C++ ► • Variables in C++
Series Playlist ► • C++
BEST laptop for programming! ► geni.us/pakTES
My FAVOURITE keyboard for programming! ► geni.us/zNhB
FAVOURITE monitors for programming! ► geni.us/Ig6KBq
MAIN Camera ► geni.us/CYUQ
MAIN Lens ► geni.us/ZM3CmG
Microphone ► geni.us/wqO6g7K
Slack ► slack.thechern...
Stream ► / thecherno
Website ► www.thecherno.com
Facebook ► / thecherno
"else if is just an if nested into an else"
my life is a lie
_EDIT: I'm letting the old example rot at the end, as it caused a lot of confusion. You'll eventually see even this example is wrong, but it better illustrates my thought process at the time._
If "else if" is just a nested if into an else, then this block of code should compile, but it doesn't:
#include
using namespace std; //Sorry guys I couldn't resist
int main() {
int x = 7;
if (x == 7) cout
@@VivekYadav-ds8oz Not sure if I am completely understanding what you're saying but the reason that code does not compile is because you cannot have a stand alone else. If...else come in pairs and else are linked to the closest incomplete if. Your first else is paired with if and the second else is not paired with anything. That is why the program doesn't compile.
@@VivekYadav-ds8oz else-if is a nested if into an else not else. That is, else is not a nested if into an else!
@@beesknees8296 You don't get it LOL!
I kinda understand what you say...
Let me try to explain , I may be wrong... Plzz feel free to correct me...ill just wright the code part
,......,.............
If(x==3) cout
I'm in college and you explain this stuff a lot better than my professors. Thank you so much for this. Keep it up!
When the professors or TAs (teaching assistants) actually speak english (not a given) they don't actually teach instead they are culling. You only pass if you can teach yourself from over-priced and badly written textbooks or already know the material. To say I am disenchanted with US higher education is a broad understatement.
This is why you don't go college if you want to do software engineering.
@@klarnorbert you can do both
why would anyone attend university?
@@spattermann5809 It's not just the US
6 years later and this is still the highest quality c++ tutorial on the internet, thanks!
ikr
you haven't seen this channel called code beauty
@@rowansteve-ng3fs Isn't she the one who does them like 10+ hour vids?
Please make some assembly tutorials!
why
Henrik Hey Do it!!
cronnostiger64 personally, I think that assembly is extremely useful, especially when it comes to optimization. If you look at the source of any major game engine they all have parts written in assembly.
***** No problem! Check out the source for the idtech3 engine (doom3 engine) sometime it's all on github and really shows off the full power of c++ :) it's one of my favorite piece's of source to read through!
***** Absolutely! I would however recommend reading through the Idmath library in the project in that case :). I understand computer graphics somewhat, I still struggle with the API's however lol(opengl and vulkan), as for learning it, I'd recommend the tutorials offered by the cherno, thinmatrix(even though he uses java, the GL is the same) also recommend checking out the computer graphics series by computerphile(they give an awesome explanation of things like how matrices work, how the scene is rasterized and how the depth buffer is created!). And overall reading through blogs is also extremely useful, just remember to start with the fundamentals and work your way up!
"Compiler will do some magic... and you'll get rekt" XD
Best part :)
i thought it was 'get rekt' lol. Even youtube auto generated subtitles say it's get rekt.
@@martingaens2073 holy shit that's pretty funny. Im surprised the auto-generated subtitles use 'rekt'
@@joshuarowe8410 yeah, I guess it has to adapt to the meme culture
Fixed wrecked to rekt... nice
Great video again. Really interesting as well, and you explain the 'ins and out' of things as well, instead of just typing code and us copying it with no real understanding, which a lot of other people just do. Thanks for putting in the time to make these videos and series.
can't believe this cool playlist was created 6 years ago
I would love some assembly videos!!!! Great video anyways
The dissassembly part was brilliantly explained, first time I'm actually understanding this
Good distinction of programming falling into two categories,
1. Mathematical programming
2. Logical programming
Please, a video for a brief explanation in assembly would be a good idea, not in great extent, just enough to follow debugging.
Also, I think you should start the OpenGL series in parallel looking forward to that!
Great series, we appreciate the fact that you go deeper in some points, it gives us a better understanding.
Keep up the great work!
Please make videos on assembly! These are so cool.
@The Cherno Your C++ series is absolutely amazing. Please, please do make a series on Assembly as well!
Thank you for your great explanations. As someone with some previous experience, I still learn new things in almost every one of your videos in this series.
do you code like this
{
}
or like this {
}
?
Fendoroid
In functions, 1st one
In if, while, etc. statements, 2nd one
Fendoroid Always the second one. I find it a lot clearer, although I can understand why people may find the first one clearer. Which one do you use?
Depends on the language convention
For example in js the convention is {
} but in c
{
}
{
}
Makes it easier to see which brackets make up a block together
Lewis B I used to put the open brace on a new line, but now I put it on the same line: it looks more compact.
thanks for explaining things from scratch. it is so valuable to see what actually is going under the hood of the c++. thanks a lot.
Yes, please an assembly tutorial!
I think an assembly tutorial/video would be a great idea. It really shows how the code write will end up working down at the metal. And gives new people a look into just how much the compiler can optimize your code without you realizing
Please assembly tutorial! Your explanation is so clear and detailed! I had learned so much from you everytime despite my school had teach the topic before.
Always learn new things from you (else if), never skip easy topics.
Hi Cherno, this series is well bought up, thank you for detailed explainations, mistakes and corrections, some new pts. and explaining via registors too. This was super fun and I hope you keep making new such videos. Thanks...😊😊😊😊
I liked the videos so much that at this point I click the like button before actually watching the videos... :)
"The little bit extra" This is why I love this series
Love this series so far. I like how you show things like viewing the disassembly and debugging in visual studio. 👍
this integrated environment teaching helps us a lot!!!!! ✌️
yes , we want some assembly tutorials
Thanks gret video my lazy college professor had me watch this to learn about if statements . The college should give you his paycheck.
yes. we want the assembly video pls. You are the best at teaching!
You cover a lot of basic things I'm already thoroughly familiar with, but you do it in such a clear progression of explanation.
You also still have some things that are new to me, like the dissassembly view.
May not be what I personally need, but very well done.
The Else If didn't excite me because I already learnt Lisp and I learnt it better there with the macros.
22:15 this is precisely why I am super excited about your tutorials. I'm really keen on understanding what makes, and how to make efficient code. Every time I use a condition statement, I freak out in my head. But I never know how to optimize my code. Thanks for doing these great videos. :)
Please make a video with examples of logic vs mathematical program flow.
that "else if" part alone convinced me to watch the entire series
¡Te amo cherno! Sigo esperando tu video acerca de ensamblador.
This series is extremely helpful, thanks for the simple yet deep explanations. And yes, if you have time can you make an assembly tutorial?
Yes please an Assembly tutorial.
wait, how can you can you pointer of char arrays? at 19:20? Wouldn't that just compare the address of the char arrays and only works by chance due to a lucky compiler optimization?
else if blew my mind :)
The compiler will do some of this magic and you will just get wrecked :D that made me smile
I would also be interested in learning some assembly for a deeper understanding if you ever get there.
The cherno brings up assembly !
My brain: left the skull
Wow. Interesting. I'm so in love with C++
That is gold! Thank you.
Please Create Assembly Language Tutorials @TheCherno
Cherno, you should have mentioned at least one example where you replace a logic operation (e.g., a branch) with an equivalent mathematical operation (or arithmetic to be exact). In my opinion, in the vast majority of cases, you can't replace logic with arithmetic. At the end, a program of any reasonable size needs a combination of both in order to complete its job.
If(var == true) bugs the heck out of me. I read it in my mind as if(true == true), and it seems so redundant. Just write if(var).
kevnar var == true is actually var == 1
EM even more late but (var != 0) :D
it is actually completely correct. true evaluates to 1, but any integer that is not false/0 evaluates to true but is not equal to true itself.
@@DireDanOriginsDEV The compiler would make var = 1 because var is a bool. Just like var = 5 * 2 gets compiled into var = 10 in the compiling stage.
bool var = 5;
if(var == 1)
{
Log("This will get printed");
}
Its best to step through it to see this happen. Check out the memory.
If you are beginner then look for conditional operator. That would help a lot
You can replace logical programming by doing mathematical operations instead? Wow, I am really intrigued in what you meant by that... I hope there'll be such example in later lessons.
This series really help me to bold my programming bases :p and learn some cool concepts that i didn't know. Thank you
20:58 "else" "hand gestures* " if"
have to love that explanation, nice video as always Cherno! :)
If "else if" is just a nested if into an else, then this block of code should compile, but it doesn't:
#include
using namespace std; //Sorry guys I couldn't resist
int main() {
int x = 7;
if (x == 7) cout
@Peterolen No I tried to nest an if statement inside an else it gives you the below error
: error C2181: illegal else without matching if
If they were truly the same else if & else {if} would behave the same way and either both or neither would give compile errors
@Peterolen Exactly my point. If you could write multiple else-ifs, AND else-if was just else {if ...}, then I had done literally nothing wrong here. Then, it wouldn't be wrong to say that compiler doesn't allows multiple else-ifs, but allows multiple else clauses (because else if = else {if ...}).
@Peterolen That's not what I have found. If you use else if and have an else statement right below it, its fine, no errors. But if you nest the if statement then it does throw you that error.
Chord before last one sounded like crash hahah anyway good lecture.
19:45
O M G 😵😵😵
"branching makes your program slower"
*glances at yandere dev*
I am glad I found this channel. Thank you very much.
Great Work, Could you provide some exercises in your way to work with, that would be awesome.! Thanks
I like how the view count keeps dropping, showing how people are giving up lol
19:40 Can someone explain why did comparison ptr == "Hello" return true if as far as I remember it compares the address that ptr contains and the address of the temporary object and it must never be true
exactly i was thining the same
great video
deep and detail!
I'm really curious about what Cherno mentioned at the very end. I thought I knew everything that was going to be discussed, and I did, only up to that last bit. Does anyone know of any sources on this topic? How would an if statement be replaced with a some 'mathematical operation'? Unless I'm already doing this and Cherno's description has not reminded me of what I usually do. I'm confused now!
Else If is not a keyword... Mind blown :D
Assembly tutorial please
What I learned about C++ today: "anything really goes"
This is even better than Python!
Thanks! I'm learning so many new stuff from your videos.
So if I understand, if you can convert an if statement into a mathematical operation to make it faster you should do do? Won't the compiler in release mode with optimizations on do it for you?
Because of the unintuitive way to write it it might be harder to understand when debugging or when looking at the code at some point later in time.
Also, how long do you estimate it to be until you move on to actual programming of useful applications/games?
Conditional branching in the logic is the issue, not that it is an if statement specifically. The cpu (a single core) can work on several parts of the code concurrently (it has separate sub-units for comparisons, adders, float multipliers, register moves, prefetching lines of memory or cache, etc) If there is a conditional branch it won't know which way it should work ahead.
Very modern machines (that do not run on a battery) use branch predictors that will work ahead based on the odds of the conditional, this can speed up long running programs but on individual conditions if it predicts the wrong branch all the working ahead is useless. (and the extra unused processing is wasted electricity)
i have found video version of wikipedia..
but we can do multiple else if, and only one else statments. How does that work?
@Artem Katerynych see my problem with that is that it is nesting, it just looks wrong doesn't it, I don't know maybe I'm basic but I'm not the big on nesting that deep you know. Once it's cool but it is basically unlimited and therefore it's unlimited nesting.
hello can u give some example of using other calculation instead of comparison?
It's so fascinating how i can still learn stuff about these things, that i already used for years in your videos. Simply amazing
The else-if explained at 20:08 works under a limited condition.
You claim that:
if () {}
else { if () {} })
==
if () {}
else if () {}
This is true only when there is only 1 if and 1 else-if statement. As soon as you append either other else-if statements or a final 'else' statement, this logic breaks. Because you cannot have
if () {}
else { if () {} }
else {}
The syntax for if/else as defined in the formal language is:
if (expression) statement else statement;
Where an expression is just any group of symbols and operators that evaluates to a value, and a statement is any command that carries out a task or a set of many other (sub)statements.
But the if statement itself is a statement too (duh). That's why the following are equivalent:
if (condition) {}
else if (condition) {}
else {}
---
if (condition) {}
else {if (condition) {}
else {}}
Note that the only thing that changed in the second example is that i added extra (redundant) curly brackets around the if statement, turning it into a compound statement containing only one statement.
Your example does not follow the grammar, because there is an "else" keyword without a matching "if" keyword.
@@ichigonixsun I see. And in the case of multiple 'else if'-s, they just go deeper? So:
if () {}
else if () {}
else if () {}
else if () {}
else {}
becomes
if () {}
else
{
if () {}
else
{
if () {}
else
{
if () {}
else {} // final else in case expressions in all previous if () statements return false.
}
}
}
@@FrostyChilli Exactly, you got it.
@@ichigonixsun Thanks for the explanation!
dword ptr is not a register, please correct it in your next video. The cmp instruction in this example compares the value which is 5 directly to the content of if the x variable. 🙏
I love your vids not only because every time I've learned so many new tricks within the old boundary of my knowledge; but also, I was able to understand the principle and the reasoning behind it. Those vids do make everything look so transparent, and do enhance my thought to view the codes in a much grander perspective. It feels like the difference between solving a physics problem using mere equations from the book (seek-and-match progress) and solving this problem by your understanding of its mathematical principle (deriving your own equations). GROUNDBREAKING lessons! I will spent the rest of two days finishing every single vid from this watch list!
You talk so much, and I love it. The depth of your explanations really helps explain why things work the way they do. Thanks!
Int x = 5 followed by an IF testing for x == 5 will always execute the block and the block after the else, will not even be compiled. Also....the pre compiler will run your code with the initialized variables (or a default value) and do a dry run on your program...dumping code that is "always true"....beware
it pisses me off that after reading a 1200-page book your videos are not only more succint but more helpful than anything in it
Please Make a video on Assembly, I have this course of computer architecture and I have to make projects in RISC V, x86 and x64 assembly, I cannot find any better source to learn.
Hi, thank you so much. You are doing a great series
something interesting:
if you define two integer variables: a and b
and then initialize it with 0 and 1
now here is a if:
if(a&&b++){
;
}
and after the if, the b is still 1
but if we change the condition:
if(a||b++){
;
}
this time b == 2
when I encountered this, I was amazed that the PC was not as stupid as I once had thought. It is clear about the condition structure. If there is a && structure, judge will end immediately after finding a false proposition(im a beginner, maybe there are some misunderstandings)
else if
vs
else {if} cannot be the same. Because if you use else if with another else statement it works the way it should; but else {if} having another else statement gives you this error.
: error C2181: illegal else without matching if
But Cherno, else if (...) and else { if (...) } are not the same thing because after "else if" you can add additional else statement, but after "else{ if () }" you can't
I'm not full convinced about the " else if " concept because if that was another " if " within the body of "else" then it should have been within a curly brackets denoting it's body as for multiple line of codes it should be inside the curly brackets. And what about the last "else" after the "else if " . can u explain that part too...
I've come this far and yet I must ask, what is cin.get(); ?? The only difference I get when I run my program with or without it is the fact that, without it, I have some sort of "confirmation" or information that the program has run till the end, and with it, it just runs the program without any additional text
Ahhhh assembly... tedious but fun.
i pressed f10 to go to the next video
When you have
const char* ptr = "Hello";
and you print prt
Wouldnt it print the address of "Hello" since it's a pointer?
good
When you bool variable into any number larger than 0, the compiler will make the variable set to 1 instead of the number. sad.
We want a video for assembly language and a video about why we shouldn't use if with what is the other efficient way of if.... please we are waiting for it for a long time.....
great! tutorial, in depth tutorial, on not only C++ but on computer programming in general; many thanks,
If else if is not a keyword, how are we able to place an else at the end of the control block? Was just curious. But this tutorial is by far the best I have seen so far
Yandere dev needs to see this :^)
I wish I had learned programming from the beginning the way you're teaching this.
I've have a little knowledge about assembly and machine code, but it still seems quite foreign to me. I'd not be dissapointed to see one or more tutorials dedicated to assembly.
am becomin the C++ pro-master in my countryy, watch me, all thankss to you 👏👏
Please assembly tutorials... I wanted to learn it before C++ but I never found any good ones.
why did you not talk about switch cases? i think they are similiar to ifs
I want to know more about mathematical vs. logical programming!
In computer science, logic is a subset of mathematics.
Can anyone suggest me good C++ IDE for Linux ... I hate windows 😒😒
I want assembly videos
Condition - If X (something) = True or false then it executes something
You can’t convince me that being able to do 1 line if statements isn’t a bug caused by if else that they left in.