cbegin 函数的返回值

use*_*317 1 c++ iterator

我有这样的代码

#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 是如何工作的,它的返回值是什么?

son*_*yao 5

std::string::cbegin() 按值返回迭代器,它返回的是一个右值,对非常量的左值引用不能绑定到右值。

我不想复制它,所以我使用 & 语法。

复制迭代器一点都不重,所以只要

for (auto it = str.cbegin(); it != str.cend(); ++it)
    std::cout << *it;
Run Code Online (Sandbox Code Playgroud)