C++23 让 std::move 更少见

Move in C++ without a std:move

C++23 让 std::move 更少见

我在之前的文章中曾建议尽量少用 std::move,而今天我想展示这一建议带来的好处:默认获得最佳性能。C++17 引入了保证的拷贝省略(copy elision),让返回值优化(RVO)和命名返回值优化(NRVO)能避免不必要的拷贝或移动。在 C++11 到 C++19 期间,某些涉及右值引用的场景仍需手动使用 std::move 才能触发移动语义,这违背了我的建议。但到了 C++23,编译器在这些情况下会自动进行隐式移动,无需再显式调用 std::move。这意味着你可以更安心地遵循“少用 std::move”的原则,同时依然获得最优性能。

一旦你将编译器切换到 C++23 模式,这两种情况都会执行隐式移动,无需 std::move。

同日更多故事

2026-09-02