在ISO标准C++中:最新的工作草案是n3291,它不是公开的.但是n3290可用.到2月份草案是n3242.我现在可以知道......哪个草案更适合成为最终草案?因为n3242与之相比有很多差异n3290?
在这个链接中他们也给了..:当前的工作草案为n3242?(为什么不n3290)
http://www.open-std.org/jtc1/sc22/wg21/
http://en.wikipedia.org/wiki/C%2B%2B0x
请告诉我哪个草案是正确的(直到最终草稿发布)?
标准的12.2.5部分说:
在函数调用(5.2.2)中与引用参数的临时绑定将持续存在,直到包含该调用的完整表达式完成为止.函数返回语句(6.6.3)中返回值的临时绑定将一直存在,直到函数退出.在所有这些情况下,在初始化引用的表达式的求值期间创建的临时值,除了引用所绑定的临时值之外,在创建它们的完整表达式的末尾以及与它们相反的顺序被销毁.完成他们的建设.
我试着理解的代码是:
#include <iostream>
const int& foo(const int& fooRef)
{
return fooRef;
} // #0
int main (void)
{
const int& numberRef = foo(5); // #1
std::cout << numberRef; // #2
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在线#1创建临时对象并绑定到fooRef参数foo.fooRef在线销毁#0.所以我认为临时应该在这里销毁,因为生命延长不是传递性的.
问题:
什么until the function exits意思?这是untill it finished executing什么意思?
为什么我得到一个5输出.临时对象是否仍然存在#2?
如何解释标准引用以弄清楚此示例的工作原理?
将非常感谢参考标准的逐步原子演练.谢谢!
PS 这里接受的答案也告诉代码是broken,我没有得到,为什么我得到这样的程序输出.
在下面的代码片段中,球体的生命周期是否以r未定义的值扩展?
struct Sphere {
auto& radius() const { return _radius;}
float _radius{};
};
struct Capsule {
auto sphere() const { return Sphere{12.0}; }
};
auto func() {
auto capsule = Capsule{};
const auto& r = capsule.sphere().radius();
std::cout << r;
}
Run Code Online (Sandbox Code Playgroud)
我知道const-references延长了临时的生命周期,但我不确定如果一个临时成员被绑定会发生什么.
注意:我非常怀疑这个片段的等价物对我造成了错误,但是Clang和Visual Studio都没有发出警告.