C++11中的字面量操作符

C++11中的字面量操作符

在C++11中,有个很有意思的功能,就是可以自定义字面量

#include<iostream>
using namespace std;
typedef unsigned char uint8;
struct RGBA
{
    uint8 r,g,b,a;
    RGBA(uint8 R,uint8 G,uint8 B,uint8 A=0):r(R),g(G),b(B),a(A){}
};
RGBA operator "" _COLOR(const char* col,size_t n)
{
    const char*p=col;
    const char* end=col+n;
    const char* r,*g,*b,*a;
    r=g=b=a=nullptr;
    for(;p!=end;++p)
    {
        if(*p=='r')r=p;
        else if(*p=='g')g=p;
        else if(*p=='b')b=p;
        else if(*p=='a')a=p;
    }
    if(!r || !g || !b)
        throw;
    else if(!a)
        return RGBA(atoi(r+1),atoi(g+1),atoi(b+1));
    else
        return RGBA(atoi(r+1),atoi(g+1),atoi(b+1),atoi(a+1));
}
ostream& operator<<(ostream & os,RGBA && color)
{
    os<<"RGBA: "<<(int)color.r<<" "<<(int)color.g<<" "<<(int)color.b<<" "<<(int)color.a;
    return os;
}

struct Watt
{
    unsigned int v;
};
Watt operator"" _W(unsigned long long v)
{
    return {(unsigned int)v};
}
int main()
{
    Watt temp=12_W;
    cout<<"r255 g234 b99 a32"_COLOR<<endl;
}
RGBA: 255 234 99 32

上面的T operator"" xxx()就是字面量操作符,其中""xxx中间有个空格不能忘记,这个函数的作用是,它能识别以xxx结尾的字面量,并把变成T类型的值。

不过上面函数的形参有一定要求:如果字面量是整数+xxx,那么形参只能是unsigned long long;如果字面量是浮点数+xxx,那么形参只能是long double;如果字面值是字符,那么形参只能是char;如果字面值是字符串+xxx,那么形参只能是const char *size_t;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值