Поскольку vlist
не является константой, будет вызвана первая опция (неконстантная).
Компилятор ищет наиболее правильный метод для вызова.
Только const
методы могут быть вызваны для константных объектов. Если у вас есть неконстантный объект, можно вызывать как константные, так и неконстантные методы объекта.
Если существуют как константные, так и неконстантные реализации метода, будет вызвана правильная , в зависимости от константности самого объекта.
Ваш пример int& x = 7
действительно неверен, но это не тот случай, представленный выше (vlist[0] = 7
). Вы правы, что нельзя объявить ссылку на rvalue
. Но присвоение rvalue
эталонному объекту совершенно нормально.