用户自定义字面值,或者叫“自定义后缀”更直观些,的主要作用是简化代码的读与写,比如:

auto mo = chrono::seconds(+1);
auto mo = +1s;

这两行是等价的,但是使用后缀的方式明显更简洁。

C++11允许用户创建自已的字面值。先看一个示例:

#include <iostream>
using namespace std;
typedef unsigned long long ull;

// C++11 2.14.8
ull operator"" _dog(ull n)
{
    return n*20000;
}

int main()
{
    auto n = 3_dog;
    cout << "your wage is" << n << " RMB" <<endl;
}

自字义后缀用operator""定义,就是一种特殊的函数。后缀名必须以下划线开头,因为没有下划线的后缀是留给std用的。后缀的参数只能是unsigned long long、long double、const char*或者const char* + size_t。没了,它就是这么简单易上手又很实用的特性。一般来说适合编为后缀的是单位,如kg,km。

C++14预定义了一些标准的字面量,s用于创建std::string,如 "hello"s;h、min、s、ms、us、ns用于创建std::chrono::duration;i、il、if用于创建复数complex<double>、complex<long double>、complex<float>。