代码之家  ›  专栏  ›  技术社区  ›  patros

跟进。是否定义了对x++的返回引用?

  •  3
  • patros  · 技术社区  · 14 年前

    我最近问了这个问题 Is the behavior of return x++; defined?

    结果和我预期的差不多,但让我想到了类似的情况。

    如果我要写

    class Foo
    {   
      ...   
      int x;   
      int& bar() { return x++; }
    };
    

    bar现在返回一个int引用,是否定义了此行为?如果上一个问题的答案是真的,而不仅仅是对正在发生的事情的一个方便的抽象,那么似乎您将返回一个对堆栈变量的引用,该堆栈变量将在执行返回时被销毁。

    如果它只是一个抽象,我想知道什么行为实际上是由后增量保证的。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Tronic    14 年前

    不,您不能这样做,因为这将返回对临时对象的引用。

        2
  •  0
  •   codaddict    14 年前

    你的代码将导致 compilation error . 但是,如果将post increment更改为pre increment,则可以工作。价值 x 是递增的,然后是对此修改的引用 X 返回。

    当前代码的问题是您试图修改临时的,这是不允许的,因为它们是临时对象。

    由此 Visual C++ blog article about rvalue references

    …C++不希望你不经意地修改时间。