сначала здесь const double&
, что неэффективно для встроенных типов.
Вы думаете, что компилятор создаст указатель и разыменование указателя, чтобы реализовать ссылку ?
Это не совсем так. Ваш компилятор умен.
Это может быть рассмотрено для аргументов функции, потому что они не могут быть "оптимизированы" таким же образом через границы объекта, но это не то, что у вас есть здесь.
Следующий код:
int a = 42;
const int& b = a;
std::cout << b << '\n';
- это та же программа, что и:
int a = 42;
std::cout << a << '\n';
, и она будет скомпилирована по тем же инструкциям.
Ваш for-l oop пример не намного сложнее, чем этот.
секунда здесь Foo&
, что правильно, но вы также можете использовать std::as_const
, чтобы сделать его const Foo&
for (auto && [first, second]: std :: as_const (map)) {/ * ... * /}
, поэтому это не проблема.
Так в чем не проблема? Здесь нет проблем.
tl; dr: Не пытайтесь исправить проблемы, которые не существуют.