C++自定义字面量(operator””)()

下面举个c++内部的字面量用的例子:

unsigned int v1 = 20U; 
long v2 = 30L;
unsigned long v3 = 40UL;

是不是很好奇数字后面 U、L、UL。

在举个栗子实现字面量方法:

在c++11引用了新的标准:用户自定义字面量,也交自定义后缀名操作符。

#include <vector>
#include <string>

long double operator"" mm(long double x) { return x / 1000; }
long double operator"" _m(long double x) { return x; }
long double operator"" _km(long double x) { return x * 1000; }
int operator"" S(unsigned long long a) { return (int)a; }


std::vector<std::string> operator"" _S(const char* pData, size_t nSize) {
    //对字符串进行切割
    std::string data = pData;
    std::vector<std::string> valueList;
    std::string::size_type pos1 = 0;
    std::string::size_type pos2 = data.find(';');
    while (std::string::npos != pos2)
    {
        valueList.push_back(data.substr(pos1, pos2 - pos1));
        pos1 = pos2 + 1;
        pos2 = data.find(';', pos1);
    }
    valueList.push_back(data.substr(pos1));
    return valueList;
}

错误定义字面量:

int operator"" A(double a) { return (int)a; } //编译器错误

注意:字面量传值类型包括:const char*、long double、unsigned long long

————————

下面举个c++内部的字面量用的例子:

unsigned int v1 = 20U; 
long v2 = 30L;
unsigned long v3 = 40UL;

是不是很好奇数字后面 U、L、UL。

在举个栗子实现字面量方法:

在c++11引用了新的标准:用户自定义字面量,也交自定义后缀名操作符。

#include <vector>
#include <string>

long double operator"" mm(long double x) { return x / 1000; }
long double operator"" _m(long double x) { return x; }
long double operator"" _km(long double x) { return x * 1000; }
int operator"" S(unsigned long long a) { return (int)a; }


std::vector<std::string> operator"" _S(const char* pData, size_t nSize) {
    //对字符串进行切割
    std::string data = pData;
    std::vector<std::string> valueList;
    std::string::size_type pos1 = 0;
    std::string::size_type pos2 = data.find(';');
    while (std::string::npos != pos2)
    {
        valueList.push_back(data.substr(pos1, pos2 - pos1));
        pos1 = pos2 + 1;
        pos2 = data.find(';', pos1);
    }
    valueList.push_back(data.substr(pos1));
    return valueList;
}

错误定义字面量:

int operator"" A(double a) { return (int)a; } //编译器错误

注意:字面量传值类型包括:const char*、long double、unsigned long long