C++11 用户自定义字面值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11 用户自定义字面值相关的知识,希望对你有一定的参考价值。

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

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>。

 

以上是关于C++11 用户自定义字面值的主要内容,如果未能解决你的问题,请参考以下文章

自定义字符类

Linux内核开发——自定义字符设备

为啥自定义字体会移动文本(更改垂直对齐方式)? [复制]

java:打印菱形图案(传参打印的自定义字符和行数)

如何在 Python 中用“”替换我的自定义字符?

css 自定义字体面