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()
?