jiafu
jiafu

Reputation: 6546

Confused with direct initialization and copy initialization

I am confused with followed concepts:

string str="123";

Some books say that: using "=" is copy initialization,

but some articles say: string str="123" is same as string str("123"). There is no doubt str("123") is directly initialization.

So which style for string str="123";?

How to judge which is copy initialization or directly initialization?

Upvotes: 2

Views: 286

Answers (2)

Kerrek SB
Kerrek SB

Reputation: 476950

It's simply a matter of grammar:

  • T x = y; is copy-initialization, and

  • T x(y); is direct-initialization.

This is true for any type T. What happens exactly depends on what sort of type T is. For primitive types (e.g. ints), the two are exactly the same. For class-types (such as std::string), the two are practically the same, though copy-initialization requires that a copy-constructor be accessible and non-explicit (though it will not actually be called in practice).

Upvotes: 4

stardust
stardust

Reputation: 5988

Yes that is called copy initialization.

Instead of default constructing str and then constructing another string from "123" using string(const char*) and then assigning the two strings, the compiler just construct a string using string(const char*) with "123".

string str="123" is same as string str("123"). There is no doubt str("123") is directly initial

However remember that is possible only if the corresponding constructor is not explicit.

Upvotes: 0

Related Questions