Is it direct-initialization or copy-initialization?

后端 未结 3 812
鱼传尺愫
鱼传尺愫 2020-12-17 02:00

Initializing objects (instances of classes or structs) in C++ can be done in various ways. Some syntaxes evoke a direct-initialization of your object, other

3条回答
  •  渐次进展
    2020-12-17 02:23

    In general:

    • T s(...); or T s{...}; is direct-initialization
    • T s = ...; is copy-initialization1

    In copy-initialization, the right-hand side is implicitly converted to a temporary instance of the type T, from which s is subsequently copy/move-constructed.

    Mr. Stroustrup presents these different initialization styles as equal.

    In many cases the generated (optimized) code is indeed exactly the same. Compilers are allowed to elide the copy construction (even if it has side effects). Modern compilers are well beyond simple optimizations such as this one so you can effectively count on this elision (which is required in C++17).

    The difference between copy and direct initialization is nevertheless very important because the semantics are different; for example, invoking constructors declared explicit is only possible in direct-initialization.


    1 The form T s = {...}; is copy-list-initialization and follows some special list-initialization rules.

提交回复
热议问题