Differences between C++ string == and compare()?

This is what the standard has to say about operator== 21.4.8.2 operator== template<class charT, class traits, class Allocator> bool operator==(const basic_string<charT,traits,Allocator>& lhs, const basic_string<charT,traits,Allocator>& rhs) noexcept; Returns: lhs.compare(rhs) == 0. Seems like there isn’t much of a difference!

Returning unique_ptr from functions

is there some other clause in the language specification that this exploits? Yes, see 12.8 §34 and §35: When certain criteria are met, an implementation is allowed to omit the copy/move construction of a class object […] This elision of copy/move operations, called copy elision, is permitted […] in a return statement in a function … Read more

std::unique_lock or std::lock_guard?

The difference is that you can lock and unlock a std::unique_lock. std::lock_guard will be locked only once on construction and unlocked on destruction. So for use case B you definitely need a std::unique_lock for the condition variable. In case A it depends whether you need to relock the guard. std::unique_lock has other features that allow … Read more

In C++, what is a virtual base class?

Virtual base classes, used in virtual inheritance, is a way of preventing multiple “instances” of a given class appearing in an inheritance hierarchy when using multiple inheritance. Consider the following scenario: class A { public: void Foo() {} }; class B : public A {}; class C : public A {}; class D : public … Read more

What is the difference between using a Makefile and CMake to compile the code?

Make (or rather a Makefile) is a buildsystem – it drives the compiler and other build tools to build your code. CMake is a generator of buildsystems. It can produce Makefiles, it can produce Ninja build files, it can produce KDEvelop or Xcode projects, it can produce Visual Studio solutions. From the same starting point, … Read more

How do I tokenize a string in C++?

The Boost tokenizer class can make this sort of thing quite simple: #include <iostream> #include <string> #include <boost/foreach.hpp> #include <boost/tokenizer.hpp> using namespace std; using namespace boost; int main(int, char**) { string text = “token, test string”; char_separator<char> sep(“, “); tokenizer< char_separator<char> > tokens(text, sep); BOOST_FOREACH (const string& t, tokens) { cout << t << “.” … Read more

What is array to pointer decay?

It’s said that arrays “decay” into pointers. A C++ array declared as int numbers [5] cannot be re-pointed, i.e. you can’t say numbers = 0x5a5aff23. More importantly the term decay signifies loss of type and dimension; numbers decay into int* by losing the dimension information (count 5) and the type is not int [5] any … Read more

How many levels of pointers can we have?

The C standard specifies the lower limit: 5.2.4.1 Translation limits 276 The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits: […] 279 — 12 pointer, array, and function declarators (in any combinations) modifying an arithmetic, structure, union, or … Read more