Инициализация ссылки
Хотя я думал, что понимаю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 ++)?