为什么部分初始化一个类然后调用委托ctor失败?

use*_*484 1 c++ delegating-constructor

以下代码不会将结构字符串成员初始化为相同的值。

#include <string>
#include <iostream>

struct S
{
    std::string s1;
    std::string s2;
    S(std::string const& s) : s1{s}{}
    S(int i) : S([&]{
        s2 = std::to_string(i);
        return std::to_string(i);
    }())
    {}
};

int main()
{
    S s{123};
    std::cout << s.s1 << "|" << s.s2;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在gcc(尝试了不同的版本)和123|clang(也有不同的版本)中通过Wandbox 遇到了分段错误。

我收到读取访问冲突Visual Studio 15.9.16

谢谢。

vil*_*pam 6

您提供给构造函数的参数(即lambda)无法访问内部成员,因为尚未构造内部成员。

这应该工作:

struct S
{
    std::string s1;
    std::string s2;
    S(std::string const& s) : s1{s}{}
    S(int i)
      : S(std::to_string(i))
    {
        s2 = s1;
    }
};
Run Code Online (Sandbox Code Playgroud)