C++-string““s操作符C++-string““s操作符

简介: C++-string““s操作符C++-string““s操作符

操作符研究

      在使用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操作符其他的应用意义,暂时还没有发现,欢迎大佬评论区留言告诉我,我会分享在文章里让更多人看到~

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

相关文章
|
3月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
131 5
|
3月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
89 2
|
4月前
|
C++ 容器
|
4月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
44 1
|
4月前
|
C++ 容器
|
4月前
|
C++ 容器
|
4月前
|
存储 C++ 容器
|
4月前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
65 4
|
4月前
|
存储 编译器 程序员
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
106 2
|
4月前
|
编译器 C语言 C++
【C++】C++ STL 探索:String的使用与理解(三)
【C++】C++ STL 探索:String的使用与理解