相关疑难解决方法(0)

ISO C++标准草案

在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

请告诉我哪个草案是正确的(直到最终草稿发布)?

c++ standards c++11

9
推荐指数
1
解决办法
5348
查看次数

临时终身延长

标准的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.所以我认为临时应该在这里销毁,因为生命延长不是传递性的.

问题:

  1. 什么until the function exits意思?这是untill it finished executing什么意思?

  2. 为什么我得到一个5输出.临时对象是否仍然存在#2

  3. 如何解释标准引用以弄清楚此示例的工作原理?

将非常感谢参考标准的逐步原子演练.谢谢!

PS 这里接受的答案也告诉代码是broken,我没有得到,为什么我得到这样的程序输出.

c++ reference object-reference lifetime temporary-objects

9
推荐指数
1
解决办法
4605
查看次数

引用绑定到临时的未定义行为的临时?

在下面的代码片段中,球体的生命周期是否以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都没有发出警告.

c++ reference lifetime

8
推荐指数
1
解决办法
124
查看次数