c++stringconstructorinitializationcode-readability

Why would you declare a std::string using it's constructor?


Most people when declaring strings in C++, or most other languages, do it like so:

std::string example = "example";

However I've seen some code samples where it is done like this:

std::string example("example");

To me it seems like it needlessly obfuscates the code, particularly if there is a using std::string statement hiding somewhere above the declaration in the code making it look like

string example("example");

To some who may be new to the codebase or are coming from other languages it almost looks like it could be a method or a function.

Is there any practical or performance based reason for using the constructor instead of the assignment operator or does it come down to just personal preference?


Solution

  • The practical reason for the second form is that it reflects what actually happens. Your two examples actually - despite their syntactic differences - do exactly the same thing.

    They are both calling a constructor which accepts a const char * to initialise example with the literal "example".

    The main difference is the way they are interpreted at times. I've lost count of the number of times I've seen people insist that

    std::string example = "example";
    

    does an assignment that calls std::strings operator=() function - except that it doesn't.

    People who get tired of fielding such claims (and prefer that someone looking at the code can understand what it actually does, wherever possible) therefore sometimes prefer the second form;

    std::string example("example");