возвращаемое значение функции cbegin - PullRequest
1 голос
/ 02 апреля 2020

У меня есть такой код

#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;
}

, и я получаю сообщение об ошибке: «начальное значение ссылки на неконстантное должно быть lvalue»

Я хочу использовать auto& it = str.cbegin() почему я не могу сделать это? Я полагаю, cbegin возвращает объект итератора, и я не хочу его копировать, поэтому я использую & синтаксис.

Не могли бы вы объяснить, как работает cbegin и что он возвращает?

1 Ответ

5 голосов
/ 02 апреля 2020

std::string::cbegin() возвращает итератор по значению; возвращается значение rvalue, а lvalue-ссылка на non-const не может привязаться к rvalue.

Я не знаю Я не хочу копировать его, поэтому я использую & синтаксис.

Копировать итератор совсем не сложно, так что просто

for (auto it = str.cbegin(); it != str.cend(); ++it)
    std::cout << *it;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...