在C ++中,当您具有以下条件时:
select id, col_a, col_b, col_c from tablename;
id | col_a | col_b | col_c
------------------------------------------|---------
1 | apple orange plum | red green blue | bill dave sue
2 | orange plum banana | yellow red | frank james
3 | kiwi fruit apple | green pink | bill sarah-jane frank
expected_result: ["apple", "orange", "banana", "fruit",
"green", "yellow", "frank", "james", "sarah-jane"]
从get_string()返回的临时变量的生存期延长到与引用v相同的生存期;
如果我具有以下条件:
std::string get_string();
std::string const& v = get_string();
临时期限是否延长了?或者这是一个悬而未决的参考文献;
我的理解是临时绑定到p的生存期 并且仅在函数运行期间存在,并且对临时目录的辅助引用不会延长生存期。
预期结果是什么?
答案 0 :(得分:1)
是的,临时文件的寿命不会再延长;在完整表达式之后,引用v
会晃晃。
std::string const& v = get_string(std::string{"Hello"});
// v becomes dangled now
我的理解是,临时绑定到p的生存期,并且仅在函数的持续时间内存在
准确地说,temporary一直存在到完整表达式的结尾,而不仅仅是函数的持续时间。
- 在函数调用中包含引用参数的临时绑定一直存在,直到包含该函数调用的完整表达式的末尾为止:如果函数返回的引用超出了完整表达式的使用寿命,则它将变为悬空引用。
通常,不能通过“将其传递”来进一步延长临时项的生存期:从临时项绑定到的引用初始化的第二个引用不会影响其生存期。
这意味着可以使用auto sz = get_string(std::string{"Hello"}).size();
之类的东西。