Вызов функции std ::, у меня тоже есть константная ссылка - PullRequest
0 голосов
/ 22 апреля 2020

Я был несколько озадачен, обнаружив, что этот код компилируется, запускается и печатает 1 2 3:

#include <functional>
#include <iostream>

int main() {
    std::function<int()> counter = [i = 0]() mutable { i++; return i; };
    std::cout << counter() << std::endl;

    const auto& constRef = counter;
    std::cout << constRef() << std::endl;
    std::cout << counter() << std::endl;
}

Кажется, что нарушение константной корректности может вызывать неконстантный operator() основной функции, когда мы удерживаем const& std::function. Я что-то упускаю?

Годболт ссылка

1 Ответ

0 голосов
/ 22 апреля 2020

Единственная перегрузка это оператор вызова :

std::function<R(Args...)>::operator()( Args... args ) const;

Он не распространяется const на свою цель.

...