Сообщение Re[2]: v.emplace_back(v[0]) от 08.10.2017 10:25
Изменено 08.10.2017 10:36 rg45
Re[2]: v.emplace_back(v[0])
Здравствуйте, MT-Wizard, Вы писали:
MW>Не UB, можно всё что явно не запрещено...
Согласно стандарту, все как раз наоборот:
Как должна повести себя программа в случа переаллокации, никаких требований нет. И будет переаллокация или нет, тоже не известно, если не зарезервировать достаточный объем памяти заранее. Так что UB в чистом виде.
Ради интереса, попробуй выполнить на Visual Studio:
MW>Не UB, можно всё что явно не запрещено...
Согласно стандарту, все как раз наоборот:
1.3.24 undefined behavior
behavior for which this International Standard imposes no requirements
Как должна повести себя программа в случа переаллокации, никаких требований нет. И будет переаллокация или нет, тоже не известно, если не зарезервировать достаточный объем памяти заранее. Так что UB в чистом виде.
Ради интереса, попробуй выполнить на Visual Studio:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> v { "Hello" };
while (v.size() < 100)
{
// v.reserve(v.size() + 1);
v.emplace_back(v[0]);
std::cout << v.size() << ": " << v.back() << std::endl;
}
}Re[2]: v.emplace_back(v[0])
Здравствуйте, MT-Wizard, Вы писали:
MW>Не UB, можно всё что явно не запрещено...
Согласно стандарту, все как раз наоборот:
Как должна повести себя программа в случае переаллокации, никаких требований нет. И будет переаллокация или нет, тоже не известно, если не зарезервировать достаточный объем памяти заранее. Так что UB в чистом виде.
Ради интереса, попробуй выполнить на Visual Studio:
MW>Не UB, можно всё что явно не запрещено...
Согласно стандарту, все как раз наоборот:
1.3.24 undefined behavior
behavior for which this International Standard imposes no requirements
Как должна повести себя программа в случае переаллокации, никаких требований нет. И будет переаллокация или нет, тоже не известно, если не зарезервировать достаточный объем памяти заранее. Так что UB в чистом виде.
Ради интереса, попробуй выполнить на Visual Studio:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> v { "Hello" };
while (v.size() < 100)
{
// v.reserve(v.size() + 1);
v.emplace_back(v[0]);
std::cout << v.size() << ": " << v.back() << std::endl;
}
}