复制初始化和显式

时间:2018-08-24 15:04:42

标签: c++ initialization

第一次尝试:

class Local {
 public:
    Local() {std::cout << "default\n"; }
    Local(const Local&) {std::cout << "copy ctor!\n"; }
};

int main() {
    // Direct list init -> Value init -> Default init
    Local obj{};

    // Copy initialization -> non-explicit copy ctor
    Local obj_one = obj;

    // Temporary value init -> Copy initialization -> non-explicit copy ctor 
    Local obj_two = Local{};

    return 0;
}

第二次尝试(添加explicit):

class Local {
 public:
    Local() {std::cout << "default\n"; }
    // now here explicit
    explicit Local(const Local&) {std::cout << "copy ctor!\n"; }
};

int main() {
    Local obj{};

    // (1) Error, copy-initialization does not consider explicit constructor
    Local obj_one = obj;

    // (2) Why there is no error?
    Local obj_two = Local{};

    return 0;
}

在第(1)种情况下-很好。 但是情况(2)呢? 我在this post中看到情况(2):

  

值初始化一个临时值,然后将该值复制到c2中(读取   5.2.3 / 2和8.6 / 14)。当然,这将需要一个非显式的副本构造器(请阅读8.6 / 14和12.3.1 / 3和13.3.1.3/1)。

clang++ -std=c++17 main.cpp

0 个答案:

没有答案