我有这样的代码
#include <iostream>
#include <string>
int main() {
std::string str{"My short string."};
for (auto& it = str.cbegin(); it != str.cend(); ++it)
std::cout << *it;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:“对非常量引用的初始值必须是左值”
我想使用auto& it = str.cbegin(),为什么我不能这样做?我想, cbegin 返回一个迭代器的对象,我不想复制它,所以我使用 & 语法。
你能解释一下,cbegin 是如何工作的,它的返回值是什么?
std::string::cbegin() 按值返回迭代器,它返回的是一个右值,对非常量的左值引用不能绑定到右值。
我不想复制它,所以我使用 & 语法。
复制迭代器一点都不重,所以只要
for (auto it = str.cbegin(); it != str.cend(); ++it)
std::cout << *it;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |