【发布时间】:2018-12-04 02:13:10
【问题描述】:
我有一个非常大的代码库,已经存在了一段时间。我一直在通过选择性地使用新的语言功能来更新它。我打算使用移动构造函数,但我什至无法想出一个复杂的场景来实现它。我不会将我什至无法进行单元测试的代码放入我的代码库中。
而且,我不能使用 std:move,因为我根本不使用标准库。我有自己的标准库,以及我自己的所有其他内容(大约一百万行代码)。所有内容都隐藏在一个不会向外界公开任何语言或平台头文件的虚拟内核中。
所以我不能使用 std::move。希望它不会做任何我做不到的神奇事情?而且我猜想在面对基类时也需要类似的东西来处理移动构造函数(几乎总是如此。)如果它确实做了一些神奇的事情,那就是库泄漏到语言中并且不会很好。
显然 Visual C++(在我的例子中是 2017 年)上没有编译设置来禁用它从省略构造函数中,这大概是为什么我无法做任何事情甚至导致它。
当然,这也引发了一个问题,即如果需要这么多努力(即使在非优化模式下)来实现它,它是否无用。
【问题讨论】:
-
我不知道,您是否尝试过查看
std::move的源代码? -
如果你有自己的标准库,自然会拥有自己的
std::move。合乎逻辑。 -
你 static_cast 到一个右值引用。
-
"如果它确实做了一些神奇的事情,那就是库泄漏到语言中并且不会很好。" 虽然
std::move几乎不是“神奇”,但我会强烈建议您不要将 C++ 标准库视为与 C++ 语言不同的构造。仍然需要 C++ 的独立实现来提供基本功能。这样的实现可能不提供容器、iostream 或其他任何东西,但是库的很多部分您要么无法自己实现,要么与语言特性有些相关。 -
我将静态转换为 r 值。编译器仍然只是删除了整个内容并直接构建到目标中,甚至没有调用复制 ctor。
标签: c++ move-constructor