C ++ 11用户定义的文字和一些结构中

我正在看提案N2765用户定义文字)已经在的发展中实现快照GCC 4.7我想在用户定义的文字如何被用来创造一些有趣和奇怪的,有时结构。

简介用户定义的文字

C ++ 03有一些文字,如在“12.2f”,其将双值浮在“F”。问题是,这些文字是不是很灵活,因为他们是非常固定的,所以你不能改变它们或创建新的。亚洲金博宝为了克服这种情况,C ++ 11引入的概念“用户定义的文字”这将使用户,创建新的自定义文字修饰的能力。新的用户定义的文本可以创建或者内置的类型(例如INT)或用户定义类型(例如类),以及事实上,他们可能是非常有用的是,它们可以代替仅返回原语的目的的效果。亚洲金博宝

对于用户自定义文字的新语法是:

[enlighter LANG =” C ++”]
输出类型运营商“” _suffix(为const char * literal_string);
[/ enlighter]

......在一个字符串的情况下。该输出类型is anything you want (object or primitive), the “_suffix” is the name of the literal modifier, isn’t required to use the underline in front of it, but if you don’t use you’ll get some warnings telling you that suffixes not preceded by the underline are reserved for future standardization.

例子

KMH到MPH转换器

[enlighter LANG =” C ++”转义=”真”线=” 1000“]
//愚蠢的转换器类
类转换器
{
上市:
转换器(双KMPH):m_kmph(KMPH){};
〜转换器(){};

双to_mph(无效)
{返回m_kmph / 1.609344;}

私人的:
双m_kmph;
};

//用户定义文字
转换操作符“” KMPH(长双KMPH)
{返回转换器(KMPH);}

INT主(无效)
{
的std :: COUT <<“转换器:” <<(80kmph).to_mph()<<的std :: ENDL;
//请注意,我用括号以
//可以称之为“to_mph”的方法
返回0;
}
[/ CCB]

请注意,字面数值类型应该是长双(浮点文本)或无符号很长很长(对于整体文字)。有没有符号类型,因为一个符号立即被分析为具有符号作为一元前缀和无符号数部分的表达式。

的std :: string字面

[enlighter LANG =” C ++”转义=”真”线=” 1000“]
的std :: string运营商“” S(为const char * P,为size_t N)
{返回的std :: string(P,N);}

INT主(无效)
{
性病::法院<< “转换我一个字符串” s.length()<<的std :: ENDL;//这里你不需要括号,注意// C字符串被自动地转换成的std :: string返回0;} [/ CCB]

system()调用

[enlighter LANG =” C ++”转义=”真”线=” 1000“]
INT运营商“” EX(为const char * CMD,为size_t NUM_CHARS)
{返回系统(CMD);}

INT主(无效)
{
“LS -lah” EX;
返回0;
}
[/ CCB]

别名和std ::地图

[enlighter LANG =” C ++”转义=”真”线=” 1000“]
的typedef的std ::地图 MYMAP;
MyMap中create_map()
{
MyMap中米;
米[“笑”] = 7;
返回米;
}
自动米= create_map();

INT&运算符“” M(常量字符*键,为size_t长度)
{返回米[键]。}

INT主(无效)
{
性病::法院<< “笑” M <<的std :: ENDL;// 7 “笑” M = 2;性病::法院<< “笑” M <<的std :: ENDL;// 2返回0;} [/ CCB]

参考

维基百科:: C ++ 11(用户定义的文本)

建议N2765

10个想法“C ++ 11用户定义的文字和一些结构中”

  1. 性病::法院<< “转换我一个字符串” s.length()<<的std :: ENDL;

    唉,我恨语法,我宁愿是这样的:
    性病::法院<< “转换我的字符串” 的ToString()长()<<的std :: ENDL。

  2. 你是有点跑题了。除了这一事实不会在C ++中是可能的,而不铸造,或以某种方式转换为第一对象。

  3. @Christian:字符串转换为一个对象。在C ++中,字符串,例如“你好”不是类型为std ::串,它们是类型(为const char [N]),其中N是字符串的长度(包括空值终止子)的。要达到这样的“你好”。长度()工作将需要铸造或字符串文字转换成用户定义的对象。

  4. 小型独立式浴缸和背靠墙组合。
    该联邦能源管制委员会的管线经验大量的,
    因为他们是负责天然气管道项目的监督。
    还有一件事,你需要给思想正在与
    所有的信息TOTO新加坡已经向您提供。

发表评论

您的电子邮件地址不会被公开。

本网站使用的Akismet,以减少垃圾邮件。了解您的意见如何处理数据