分享

C++-string““s操作符

 翟天保的图书馆 2022-01-13

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

操作符研究

       在使用string时,偶然发现了一个""s操作符,感觉很新鲜就研究了一下。假设有string字符串"123\0Δ\0abc",因为里面有\0结束符,所以该字符串尺寸只有3,输出"123\0Δ\0abc"只会显示"123";但是如果是字符串"123\0Δ\0abc"s,后面加了个s,那么字符串尺寸就是3+1+2+1+3=10,因为特殊符号Δ占了两个字符,输出显示为"123Δabc"。

       所以我研究了一下""s操作符的源码,发现它是将字符串转换为C字符串,然后统计了字符串长度,再输出了完整长度的字符串。为了验证想法准确性,我定义了s[]="123\0Δ\0abc",然后输出string(s,10),果不其然,结果同""s操作符一样。

       下方为操作符源码和测试代码。

操作符源码

inline string operator "" s(const char *_Str, size_t _Len)
{// construct literal from [_Str, _Str + _Len)
return (string(_Str, _Len));
}

C++测试代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
string s1 ="123\0Δ\0abc";
string s2 = "123\0Δ\0abc"s;
char s[]= "123\0Δ\0abc";

cout << "s1.size():" << s1.size() << endl;
cout << "s2.size():" << s2.size() << endl;

cout << "s1:" << s1 << endl;
cout << "s2:" << s2 << endl;
cout << "s:" << string(s, 10) << endl;
return 0;
}

测试效果

图1 测试结果图

       如上图所示,""s操作符输出结果和string(s,length)一致,至于""s操作符其他的应用意义,暂时还没有发现,欢迎大佬评论区留言告诉我,我会分享在文章里让更多人看到~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多