I'm a novice at programming although I've been teaching myself Python for about a year and I studied C# some time ago.
This month I started C++ programming courses at my university and I just have to ask; "why is the C++ code so complicated?"
Writing "Hello world." in Python is as simple as "print 'Hello world.'" but in C++ it's:
# include <iostream> using namespace std; int main () { cout << "Hello world."; return 0; }
I know there is probably a good reason for all of this but, why...
This is probably because I'm learning such basic C++ but every program I've made so far looks like this, so I have to retype the same code over and over again. Isn't that redundant? Couldn't the compiler just input this code itself, since it's always the same (i.e. afaik you always include <iostream>, std, int main, return 0)
C is more difficult to learn than JavaScript, but it's a valuable skill to have because most programming languages are actually implemented in C. This is because C is a “machine-level” language. So learning it will teach you how a computer works and will actually make learning new languages in the future easier.
One of the reasons C++ is rather complicated is because it was designed to address problems that crop up in large programs. At the time C++ was created as AT&T, their biggest C program was about 10 million lines of code. At that scale, C doesn't function very well.
This complexity and the seeming (bold seeming) interchangeability with references ,which is often another caveat of pointers and an error of newcomers, makes understanding pointers hard.
Although C++ is one of the most widespread programming languages, many prominent software engineers criticize C++ (the language, and its compilers) for being overly complex and fundamentally flawed. Among the critics have been: Robert Pike, Joshua Bloch, Linus Torvalds, Donald Knuth, Richard Stallman, and Ken Thompson.
In response to your questions at the end of the post, it can be summed up with the philosophy of C++:
You don't pay for what you don't use.
You don't always need to use stdin or stdout (Windows/GUI apps?), nor will you always be using the STL, nor will everything you write necessarily use the standard main (winAPI) etc. As a previous poster said, C++ is lower level than Python. You will be exposed to more of the details, which offers you more control over what you're doing.
C++ is a more low-level language that executes without the context of an interpreter. As such, it has many different design choices than does Python, because C++ has no environment which it can rely on to manage information like types and memory. C++ can be used to write an operating system kernel where there is no code running on the machine except for the program itself, which means that the language (some library facilities are not available for so-called freestanding implementations) must be self-contained. This is why C++ has no equivalent to Python's eval
, nor a means of determining members, etc. of a class, nor other features that require an execution environment (or a massive overhead in the program itself instead of such an environment)
For your individual questions:
<iostream>
everytime? Do you ever not need it?#include <iostream>
is the directive that imports the <iostream>
header into your program. <iostream>
contains the standard input/output objects - in particular, cout
. If you aren't using standard I/O objects (for instance, you use only file I/O, or your program uses a GUI library, or are writing an operating system kernel), you do not need <iostream>
std
is the namespace containing all of the standard library. using namespace std;
is sort of like from std import *
, whereas a #include
directive is (in this regard) more like a barebones import std
statement. (in actual fact, the mechanism is rather different, because C++ does not use using namespace std;
to automatically lookup objects in std
; the using-directive only imports the names into the global namespace.)
I'll note here that using-directives (using namespace
) are frequently frowned upon in C++ code, as they import a lot of names and can cause name clashes. using-declarations (using std::cout;
) are preferred when possible, as is limiting the scope of a using-directive (for instance, to one function or to one source file). Don't ever put using namespace
in a header without good reason.
main
is the entry point to the program - where execution starts. In Python, the __main__
module serves the same purpose. C++ does not execute code outside a defined function like Python does, so its entry point is a function rather than a module.
std::cout
is only needed if you don't import the cout
name into the global namespace, either by a using-directive (using namespace std;
) or by a using-declaration (using std::cout
). In this regard, it is once again much like the distinction between Python's import std
and from std import *
or from std import cout
.
The <<
is an overloaded operator for standard stream objects. cout << value
calls cout
's function to output value
. Python needs no such extra code because print
is built into the language; this does not make sense for C++, where there may not even be an operating system, much less an I/O library.
No. main
(and no other function) has an implicit return 0;
at the end. The return value of main
(or, if the exit
function is called, the value passed to it) is passed back to the operating system as the exit code. 0 indicates the program successfully executed - that it encountered no errors, etc. If an error is encountered, a non-zero value should be returned (or passed to exit
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With