Where I work, people mostly think that objects are best initialised using C++-style construction (with parentheses), whereas primitive types should be initialised with the = operator:
std::string strFoo( "Foo" ); int nBar = 5;
Nobody seems to be able to explain why they prefer things this way, though. I can see that std::string strFoo = "Foo"; would be inefficient because it would involve an extra copy, but what’s wrong with just banishing the = operator altogether and using parentheses everywhere?
Is it a common convention? What’s the thinking behind it?
Unless you’ve proven that it matters with respect to performance, I wouldn’t worry about an extra copy using the assignment operator in your example (
std::string foo = 'Foo';). I’d be pretty surprised if that copy even exists once you look at the optimized code, I believe that will actually call the appropriate parameterized constructor.In answer to your question, yes, I’d say that it’s a pretty common convention. Classically, people have used assignment to initialize built-in types, and there isn’t a compelling reason to change the tradition. Readability and habit are perfectly valid reasons for this convention given how little impact it has on the ultimate code.