Стандартный проект C++ N4296 говорит
[class.temporary/5] Второй контекст — это когда ссылка привязана к временному объекту. Временный объект, к которому привязана ссылка, или временный объект, являющийся полным объектом подобъекта, к которому привязана ссылка, сохраняется в течение всего времени существования ссылки, за исключением...
Поэтому я хочу знать, что произойдет, если две или более ссылок привязаны к временному объекту. Это указано в стандарте? Примером может служить следующий код:
#include <iostream> //std::cout
#include <string> //std::string
const std::string &f() {
const std::string &s = "hello";
static const std::string &ss = s;
return ss;
}
int main() {
const std::string &rcs = f();
std::cout << rcs; //empty output
//the lifetime of the temporary is the same as that of s
return 0;
}
Если мы изменим граничный порядок, дело обстоит иначе.
#include <iostream> //std::cout
#include <string> //std::string
const std::string &f() {
static const std::string &ss = "hello";
const std::string &s = ss;
return ss;
}
int main() {
const std::string &rcs = f();
std::cout << rcs; //output "hello"
//the lifetime of the temporary is the same as that of ss
return 0;
}
Сборка производится на Ideone.com.
Я предполагаю, что [class.temporary/5] имеет место только тогда, когда ссылка first привязана к временной, но я не могу найти доказательства в стандарте.
std::string
, созданный из"hello"
, и он привязан к первой ссылочной переменной. Вторая ссылка привязана к lvalue, полученному в результате оценки id-выражения, содержащего первую переменную. - person Kerrek SB   schedule 21.11.2015