Я к тому, что если автора учили, что ссылки обезопасят его, то это не правда.
Например, есть функция void print(int const& a);
Кажется, что «a» всегда будет инициализирован. Но пользователь может вызвать её так: print(*p), где int* p = NULL;
То есть, если функция принимает ссылку, это ничего не значит. Ссылки могут быть битыми.
Я говорю про конкретный пример, в котором условия очень простые, что тестами их покрывать даже не нужно. Про второй пункт согласен. Если чуть сложнее или повторно используется, то, конечно, в отдельный метод.
Объявляем конвертер:
И кладём их в мапу:
Например, есть функция void print(int const& a);
Кажется, что «a» всегда будет инициализирован. Но пользователь может вызвать её так: print(*p), где int* p = NULL;
То есть, если функция принимает ссылку, это ничего не значит. Ссылки могут быть битыми.
> 2. Нельзя сравнить адрес, содержащийся в ссылке, с адресом другого объекта или NULL.
> 4. Ссылка не может содержать нулевой адрес (поскольку проверить и обработать это невозможно).
Тем более отлаживать это проще и выводить в лог переменные.
Lambda functions for GCC compilers even without C++11 support