修改临时不正确吗?

use*_*979 5 c++

在C++ 98/03/11中,以下代码有效:

std::string meow() { return "meow"; }

int main()
{
    meow().append("purr");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于临时死在分号,这应该是安全的吗?

Cas*_*Cow 5

这不是不正确的,在某些情况下这样做很有用.

假设我有一个包含大量数据的向量,我想清除数据和内存.

{ 
   std::vector< int >().swap( myVec );
}
Run Code Online (Sandbox Code Playgroud)

会清楚记忆.myVec.clear()可能只会将逻辑大小更改回0.

正如我在上一个问题中所示,您可以像这样使用它:

class Foo
{
   public:
       Foo& operator+=( Foo const& ); // implement
       Foo operator+( Foo const& rhs ) const
       {
          return Foo( *this ) += rhs;
       }
 };
Run Code Online (Sandbox Code Playgroud)

那里的实现修改了一个临时的,然后按值返回它(C++ 11中的r值引用,C++ 03中的值).

显然,对于r值引用,您有更多示例,例如您可以返回 meow().append( "purr")