Я наткнулся на следующий пример, просматривая Основные положения C ++ документ:
пример
change_speed(double s); // bad: what does s signify? // ... change_speed(2.3);
Лучшим подходом является явное указание значения двойного (новая скорость или дельта на старой скорости?) И используемой единицы измерения:
change_speed(Speed s); // better: the meaning of s is specified // ... change_speed(2.3); // error: no unit change_speed(23m / 10s); // meters per second
Мы могли бы принять простой (безразмерный) double как дельту, но это было бы подвержено ошибкам.
Что касается этой последней строки кода, на этой конкретной странице не было упоминания о том, что означает этот синтаксис, и он выглядел совершенно чуждым для меня.
После нескольких часов потрачены впустую Я решил выяснить, что это, вероятно, стандартная библиотека, предопределенная пользователем, и узнать больше о них, я попытался выяснить, где определен этот конкретный литерал, но пока упоминается «s» Вот вместе с горсткой других литералов я не нашел информации о «м».
Существует также этот вопрос по SO, но я думаю, что ответы там, кажется, полностью устарели.
Q: Где определен пользовательский литерал «m» в стандартной библиотеке *?
* Сладкая, сладкая аллитерация.
Это не стандартный пользовательский литерал
Список стандартных пользовательских литералов можно найти здесь внизу: http://en.cppreference.com/w/cpp/language/user_literal
А также operator""m
не является одним из них, так как стандартная библиотека не имеет дело с единицами длины (пока).
Других решений пока нет …