3.4 KiB
C++ has good stuff
As stated in the C++ harmful section C++ is a mostly bad programming language. But the great things about C++ are REALLY great and worth mentioning:
Concurrency
Threads API
Let's be honest, no matter how much you love C, you have to recognize that the pthreads API are garbage. But C++'s threads API is much better:
#include <iostream> #include <thread> #include <mutex> int j = 10; std::mutex j_lock; int counter_1() { for(int i = 0; i <=10000; i++) { j_lock.lock(); /* critical section begins here */ j++; j_lock.unlock(); /* critical sectrion ends here */ } return 0; } int counter_2() { for(int i = 0; i <=10000; i++) { j_lock.lock(); /* critical section begins here */ j--; j_lock.unlock(); /* critical section begins here */ } return 0; } int main(void) { std::thread t1(counter_1); /* This starts the thread automatically */ std::thread t2(counter_2); t1.join(); /* wait for the thing to finish */ t2.join(); std::cout << j << std::endl; }
Async functions and stuff
As far as I know, C doesn't have this (well, it does but as state above you'll have to have a lot of patience to work with pthreads). but C++ does.
#include <iostream> #include <future> int do_stuff() { /* this function takes its time to be completed */ return 0; /* Everything's alright */ } int main() { std::future<int> future = std::async(do_stuff); std::cout << "do_stuff() is being executed in the background" << std::endl; std::cout << "The return value of do_stuff is: " << future.get() << std::endl; return 0; }
C compatibility
Yes, you can be a C++ wizard and all you want, but saying "C++ has a good syntax" is like saying "I love my job" -- You're only saying that to convince yourself to get up from bed every morning. C++ is backwards compatible with C. Meaning that you can call C functions from C++. So you can do all your programming in C and only use the cool C++ features.
Things C doesn't have
You can write literally anything in C, but implementing a linked list
gets boring at the third time you do it (altough you can use things
like libulz) . So C++ has all the abstraction a normal human could
want. Such as vectors (dynamics arrays, in C you would have to do
really weird shit with realloc()
or implementing a linked list),
actual strings (C strings are very based, and a literal chad move
though).
Creating libs is easy
Due to portability, there are things that C++ can't do by itself, such
as creating UNIX sockets, which as far as i know, sockets in C++ must
use the C sockets API. As stated before, calling C functions from C++
is very trivial, and you just have to call them. Converting C++ data
types to C is trivial, because they're either the same datatype or
there's a method for converting it to the C data type (c_str
for the
case of std::string
, which will convert it to char *
datatype). So
you can easily create C++-styles functions from C functions.
Despite that, don't write complex libs in C++, as C users would want to use it as well, looking at you, qt.