Рассмотрим следующую программу C++:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> v(2, std::string(24,0));
for (auto& s : v) {
std::cout << "Address: " << (void*)s.data() << std::endl;
}
}
Я ожидал бы, что каждая строка в векторе будет указывать на другую область памяти, но при компиляции с -D_GLIBCXX_USE_CXX11_ABI=0
при использовании gcc 6.3.0 и 8.2.1 они показывают один и тот же адрес. (при компиляции без флага они показывают разные адреса). Почему это?