标准库预定义的"用户定义"文字"m"在哪里定义?

Tas*_*nou 3 c++ units-of-measurement c++-standard-library

我在浏览C++ Core Guidlines文档时偶然发现了以下示例:

change_speed(double s);   // bad: what does s signify?
// ...
change_speed(2.3);
Run Code Online (Sandbox Code Playgroud)

一个更好的方法是明确双重的意义(旧速度的新速度或增量?)和使用的单位:

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
Run Code Online (Sandbox Code Playgroud)

我们本可以接受一个普通(无单位)双精度作为delta,但这很容易出错.

关于最后一行代码,在该特定页面上没有提到该语法的含义,它看起来对我来说是陌生的.

经过几个小时的浪费投入搞清楚这可能是一个预定义的"用户定义"文字的标准库,并且更多地了解它们,我试图找出这个特定文字的定义,但是这里提到 's' 和少数几个其他文字,我没有找到关于'm'的信息.

关于SO 还有这个问题,但我认为那里的答案似乎已经完全过时了.

问:标准库预定义的用户定义文字"m"在哪里定义*?


*甜美,甜蜜的头韵.

Fat*_*KIR 5

它不是标准的用户定义文字

标准用户定义的文字列表可以在底部找到:http://en.cppreference.com/w/cpp/language/user_literal

并且operator""m不是其中之一,因为标准库不处理长度单位(尚未).

  • @TasosPapastylianou,好吧,Bjarne实际上喜欢制作一些功能,以便一些例子更清晰(比如在他的C++ 11/14书中使用范围).正如您所说,不允许在没有下划线的情况下使用它.因此,在我们获得标准长度单位之前,该代码形成错误. (2认同)