[原创]C++98升级到C++20的复习旅途-个人感觉std::string_literals这个东西实现的不太人性化.

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ联系: 643439947
个人网站: 80x86汇编小站 https://www.x86asm.org
编程生涯: 2001年~至今[共22年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
今晚在折腾std::string_literals这个东西,  因为是C++11引入的一个称为"user-defined string literal"的新概念. 认真看了代码演示之后, 就觉得有瑕疵.

[C++11新概念][user-defined string literal]
下面看看这3行代码的区别,

第一种写法:

std::array<std::wstring, 2> colors {L"orange", L"yellow"} ;

第二种写法: 通过's'后缀标识, 进行std::string的隐式转换. 这里用了宽字符L, 所以隐式转换为std::wstring

using namespace std::string_literals;
std::array colors {L"orange"s, L"yellow"s} ;

客观说, 虽然说C++11引入"user-defined string literal"概念, 目的是方便各种类型隐式转换. 但是有一个弊端就是, 需要使用"using namespace std::string_literals"方式来简化写法. 为什么说是弊端呢? 因为在超级大项目中, 用using namespac的方式来避免过长的名字空间描述的时候, 会产生新的名字空间污染. 这是非常不好的写法. 后来, 我尝试写完整的限定名称, 结果发现这是很可笑的语法糖. 

第三种写法: 虽然避免了名字空间的污染, 但是写法太累赘了.

std::array<std::wstring, 2> colors {std::string_literals::operator""s(L"orange", 6),
                                    std::string_literals::operator""s(L"yellow", 6)} ;

[结尾]
最终经过3种写法, 我还是喜欢第一种, 简单明朗.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是代码教父

我的创作动力离不开你的真诚激励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值