C++ 这是有效的优化吗?

C++ 这是有效的优化吗?,c++,move-semantics,C++,Move Semantics,“Hello.”是一个临时文件,它被构造、复制到std::string中,然后被销毁。我们可以跳过复制,直接开始移动。但是任何一个好的编译器都会删除副本。那么,以下几点是否有意义: std::string s(std::move("Hello.")); 不,移动字符串文字没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。不,移动字符串文本没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。不,移动字符串文本没有意义。它是一个静态数组(不是“构建的临

“Hello.”
是一个临时文件,它被构造、复制到
std::string
中,然后被销毁。我们可以跳过复制,直接开始移动。但是任何一个好的编译器都会删除副本。那么,以下几点是否有意义:

std::string s(std::move("Hello."));

不,移动字符串文字没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。

不,移动字符串文本没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。

不,移动字符串文本没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。

不,移动字符串文本没有意义。它是一个静态数组(不是“构建的临时数组”),不能移动,只能复制。

如果这是合法的,我不知道是否合法,它没有优化任何东西


文本是在编译时在静态空间中创建的。它不能移动<代码>字符串将始终拥有数据的副本,而不仅仅是“引用”数据。

如果这是合法的,我不知道是否合法,那么它并没有优化任何内容


文本是在编译时在静态空间中创建的。它不能移动<代码>字符串将始终拥有数据的副本,而不仅仅是“引用”数据。

如果这是合法的,我不知道是否合法,那么它并没有优化任何内容


文本是在编译时在静态空间中创建的。它不能移动<代码>字符串将始终拥有数据的副本,而不仅仅是“引用”数据。

如果这是合法的,我不知道是否合法,那么它并没有优化任何内容


文本是在编译时在静态空间中创建的。它不能移动<代码>字符串将始终拥有数据的副本,而不仅仅是“引用”数据。

您的代码没有多大意义,因为它在逻辑上等同于:

Foo bar( std::move( 123 ) );
移动常量没有意义,字符串文字是一个常量。更好的问题应该是,我认为你的问题真正的意思是:

class Foo { ... };

class Bar {
public:
    Bar( const Foo &foo );
    Bar( Foo &&foo );
...
};

Bar bar( std::move( Foo() ); // Does it make sense?
因此,实际上对于这种情况,
std::move
可以用作语法糖,以避免函数声明的形式:

Bar bar( Foo() );
但它不会进行任何优化,在这种情况下:

Bar bar = std::move( Foo() );

这将是完全冗余的

您的代码没有多大意义,因为它在逻辑上等于:

Foo bar( std::move( 123 ) );
移动常量没有意义,字符串文字是一个常量。更好的问题应该是,我认为你的问题真正的意思是:

class Foo { ... };

class Bar {
public:
    Bar( const Foo &foo );
    Bar( Foo &&foo );
...
};

Bar bar( std::move( Foo() ); // Does it make sense?
因此,实际上对于这种情况,
std::move
可以用作语法糖,以避免函数声明的形式:

Bar bar( Foo() );
但它不会进行任何优化,在这种情况下:

Bar bar = std::move( Foo() );

这将是完全冗余的

您的代码没有多大意义,因为它在逻辑上等于:

Foo bar( std::move( 123 ) );
移动常量没有意义,字符串文字是一个常量。更好的问题应该是,我认为你的问题真正的意思是:

class Foo { ... };

class Bar {
public:
    Bar( const Foo &foo );
    Bar( Foo &&foo );
...
};

Bar bar( std::move( Foo() ); // Does it make sense?
因此,实际上对于这种情况,
std::move
可以用作语法糖,以避免函数声明的形式:

Bar bar( Foo() );
但它不会进行任何优化,在这种情况下:

Bar bar = std::move( Foo() );

这将是完全冗余的

您的代码没有多大意义,因为它在逻辑上等于:

Foo bar( std::move( 123 ) );
移动常量没有意义,字符串文字是一个常量。更好的问题应该是,我认为你的问题真正的意思是:

class Foo { ... };

class Bar {
public:
    Bar( const Foo &foo );
    Bar( Foo &&foo );
...
};

Bar bar( std::move( Foo() ); // Does it make sense?
因此,实际上对于这种情况,
std::move
可以用作语法糖,以避免函数声明的形式:

Bar bar( Foo() );
但它不会进行任何优化,在这种情况下:

Bar bar = std::move( Foo() );

这将是完全多余的

使它更难重新调整,因为答案是“不”,不使它成为一个坏问题使它更难重新调整,因为答案是“不”,不使它成为一个坏问题使它更难重新调整,因为答案是“不”,不使它成为一个坏问题使它更难重新调整,因为答案是“不”实际上,
Bar(std::move(Foo());
确实有意义,因为
Bar(Foo());
只是一个函数声明:)那么
Bar=Foo()呢简单?:)@阅读答案,看看上一条语句中的
std::move()
是完全多余的,然后从那里删除
std::move()
?实际上,
Bar(std::move(Foo());
是有意义的,因为
Bar(Foo());
只是一个函数声明:)那么
Bar=Foo()呢简单?:)@阅读答案,看看上一条语句中的
std::move()
是完全多余的,然后从那里删除
std::move()
?实际上,
Bar(std::move(Foo());
是有意义的,因为
Bar(Foo());
只是一个函数声明:)那么
Bar=Foo()呢简单?:)@阅读答案,看看上一条语句中的
std::move()
是完全多余的,然后从那里删除
std::move()
?实际上,
Bar(std::move(Foo());
是有意义的,因为
Bar(Foo());
只是一个函数声明:)那么
Bar=Foo()呢简单?:)@如果您阅读了答案,看到上一条语句中的
std::move()
是完全冗余的,然后从中删除
std::move()