const auto& 与 as_const 之间的区别?

Mer*_*Mer 2 c++ c++17

基本上,我正在尝试了解 C++ 17,并且我发现了as_const.

我们使用时有什么区别:

MyType t;
auto& p = as_const(t);
Run Code Online (Sandbox Code Playgroud)

代替:

MyType t;
const auto& p = t;
Run Code Online (Sandbox Code Playgroud)

这里有一些优点吗?

xsk*_*xzr 5

就你而言,它们是相同的。

std::as_const通常用于从一组重载(成员)函数中选择 const 版本。以下是来自cppreference的示例。

struct cow_string { /* ... */ }; // a copy-on-write string
cow_string str = /* ... */;
 
// for(auto x : str) { /* ... */ } // may cause deep copy
 
for(auto x : std::as_const(str)) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

即使您使用for(const auto &x : str),仍然可能会发生深复制。