Инициализация ссылки

Хотя я думал, что понимаюrvalue а такжеlvalue семантика в C ++, я, кажется, снова и снова топать в странные примеры, которые доказывают мне, что я нене знаю приседания.

Однако есть два очень простых и основных, которые я нене понимаю, как они работают. До того, как я скомпилировал их, я думал, что ничего не подойдет(1) работает, я думал, что(2) будет работать тоже. Тем не мение,(1) работает,(2) Безразлично»т:

(1) const std::string &s = "asd";

Что здесь происходит? Я думаю, что временныйconst string объект построен из"asd", а потомs связан с этим временным объектом. Но неt тогда временный объект будет уничтожен сразу после этой строки, чтобы мы остались с недопустимой ссылкой?

Когда я бросаюconst классификатор:

(2) std::string &s = "asd";

Я получаю ошибку компилятора (VS 2013):cannot convert from 'const char [4]' to 'std::string &', Что, кажется, опровергает мою теорию, потому что, согласно ей (мое предположение), временныйstring объект будет построен из"asd" а потомs назначенный ему, который бы нене генерировать любую ошибку компиляции.

Итак, подведем итог:

К чемуs связаны?Какова продолжительность жизни объекта, которыйs связан с?Что делает(1) компилировать и(2) нет (это некоторые операторы преобразования, определенные вstd::string или это семантика C ++)?

Ответы на вопрос(3)

Ваш ответ на вопрос