Имеет ли следующая программа неопределенное поведение?
#include <iostream>
#include <vector>
struct Foo
{
const std::vector<int> x;
};
int main()
{
std::vector<int> v = {1,2,3};
auto f = new Foo{v};
const_cast<int&>(f->x[1]) = 42; // Legal?
std::cout << f->x[1] << "\n";
}
Обратите внимание, что он не использует const_cast
для удаления константности из f->x
, а вместо этого удаляет константность из f->x[x]
, которая предположительно представлена отдельным массивом. Или перевод может предполагать, что f->x[1]
неизменен после его создания?
int main() { const std::vector<int> y(1); (int&)y[0] = 42; }
- person M.M   schedule 04.05.2019const std::vector<int> &
s, будьте осторожны, чтобы библиотека не предполагала, чтоint
s не меняются, даже если компилятор не может этого предположить. - person Caleth   schedule 18.11.2019