【问题标题】:Where is the standard library predefined 'user-defined' literal "m" defined?标准库预定义的“用户定义”文字“m”在哪里定义?
【发布时间】:2017-12-26 20:44:53
【问题描述】:

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

示例

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

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

关于最后一行代码,该特定页面上没有提及该语法的含义,而且它对我来说看起来很陌生。

浪费几个小时后发现这可能是一个标准库预定义的“用户定义”文字并了解更多关于它们的信息,我试图找出这个特定文字的定义位置,但是虽然's' 被提到 here 以及一些其他文字,我没有找到关于 'm' 的信息。

还有this关于SO的问题,但我认为那里的答案似乎完全过时了。

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


* 甜蜜、甜蜜的头韵。

【问题讨论】:

    标签: c++ c++-standard-library units-of-measurement


    【解决方案1】:

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

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

    operator""m 不是其中之一,因为标准库不处理长度单位(目前)。

    【讨论】:

    • 感谢法提赫。我实际上已经链接到问题中的那个链接 :) 所以如果 23m 不是标准库文字,这是什么?或者如果它 一个用户定义的文字但不是标准库的文字,为什么允许它不带下划线?
    • 或者你只是说 Bjarne 可能发明了一个标准库中还没有的文字,只是为了那个例子的目的?
    • @TasosPapastylianou,嗯,Bjarne 实际上喜欢制作一些功能,以便让一些示例更清晰(比如在他的 C++11/14 书中使用范围)。正如您所说,不允许在没有下划线的情况下使用它。因此,在我们得到标准长度单位之前,该代码的格式不正确。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多