Инициализация вектора при единообразной инициализации

#c 11 #uniform-initialization

#c 11 #единообразная инициализация

Вопрос:

Я использую следующий код

 class test
{
public:
    test(std::vector<std::string> str)
    {
        auto a = str[0];
        a = "B";
    }
    test()
    {
    }
    const std::multimap<int,  std::multimap<int, test>> _var= {
        {0x01,  {
                    {
                        0x0f, std::vector<std::string>{"A", "B", "C", "D"}
                    }
        }
        }
    };
};

int main()
{
    test t;
    std::cout << "Done";
}
  

Приведенный выше код выполняется нормально, однако при его запуске я получаю неверный доступ. Я подключил стек вызовов. Есть предложения, почему я получаю эту ошибку? или как я могу это исправить? Похоже, что это постоянный цикл.

введите описание изображения здесь

Комментарии:

1. В чем ошибка? Для меня код соответствует требованиям.

2. Сейчас речь идет не о компиляции, а о плохом доступе. Похоже, что это постоянный цикл или что-то в этом роде во время инициализации

3. попробуйте запустить код

4. Пробовал. Обычное завершение. Какой компилятор вы используете?

5. Я использую clang. Xcode

Ответ №1:

У вас есть случай бесконечной рекурсии, приводящей к переполнению стека.

Создайте экземпляр test —>
Инициализируйте _var —>
Создайте экземпляр test —>
Инициализируйте _var —>

и так далее.