odi*_*erd 25 c++ const move-semantics c++11
以下代码在MSVC2010上编译并运行,是吗?
const std::string s = "foo";
std::string s2(std::move(s));
Run Code Online (Sandbox Code Playgroud)
我可以看出为什么这可能不会破坏任何东西,因为如果我采用s的内部我必须知道没有人会使用它所以我不得不放弃const.然而,编译器在ROM(在嵌入式应用程序中)实现const对象的位置呢?那么此举会变成副本吗?或者MSVC应该给我一个错误?
seh*_*ehe 30
我想std::move(T const&)
只是回归T const &&
.这意味着,它实际上不会被移动(因为移动赋值运算符/构造函数与param类型不匹配).
所发生的是,构造函数T const&
匹配lvalue
(变量类型T const &&
),因此,移动降级为副本.
Pup*_*ppy 23
这没什么区别
const std::string f() { return "foo"; }
std::string s2 = f();
Run Code Online (Sandbox Code Playgroud)
这曾经是一次推荐的C++ 03,委员会在引入rvalue引用时没有破坏这段代码.它只是降级为副本.
归档时间: |
|
查看次数: |
2125 次 |
最近记录: |