Does the equal sign make a difference in brace initialization? eg. 'T a = {}' vs 'T a{}'

前端 未结 1 435
说谎
说谎 2020-12-09 01:55

Here are two ways to initialize a variable in C++11:

T a {something};
T a = {something};

I tested these two in all scenarios I could think

相关标签:
1条回答
  • 2020-12-09 02:16

    The only significant difference I know is in the treatment of explicit constructors:

    struct foo
    {
        explicit foo(int);
    };
    
    foo f0 {42};    // OK
    foo f1 = {42};  // not allowed
    

    This is similar to the "traditional" initialization:

    foo f0 (42);  // OK
    foo f1 = 42;  // not allowed
    

    See [over.match.list]/1.


    Apart from that, there's a defect (see CWG 1270) in C++11 that allows brace-elision only for the form T a = {something}

    struct aggr
    {
        int arr[5];
    };
    
    aggr a0 = {1,2,3,4,5};  // OK
    aggr a1 {1,2,3,4,5};    // not allowed
    
    0 讨论(0)
提交回复
热议问题