【发布时间】:2013-02-06 20:31:31
【问题描述】:
下面的代码在MSVC2010上编译运行,应该吗?
const std::string s = "foo";
std::string s2(std::move(s));
我明白为什么这可能不会破坏任何东西,因为如果我采用 s 的内部结构,我必须知道没有人会使用它,所以我放弃 const 并不重要。但是,编译器在 ROM 中(在嵌入式应用程序中)在哪里实现 const 对象呢?此举会变成副本吗?还是 MSVC 应该给我一个错误?
【问题讨论】:
-
可能由于一些优化而编译?
-
@icepack 不,编译,特别是检查 const 正确性等。在优化之前。
-
@icepack 优化的黄金法则是 as-if 规则。编译器不能进行优化,因为它们的行为就像没有应用它们一样(就可观察的行为和语言规定的规则而言)。
标签: c++ c++11 constants move-semantics