很多初学者分不清楚 vector 容器的容量(capacity)和大小(size)之间的区别,甚至有人认为它们表达的是一个意思 混淆地方。...在构造时候已经预先分配 size_type capacity() const { return size_type(_M_end_of_storage - begin()); } std...::vector::reserve Request a change in capacity 第二步 查看 insert函实现 case1-a:对应的源代码解析中的case1-a情况; case1...别人知道,我不知道的 收益:停留60秒回忆 new 和malloc ,free delete?...复制的内容不同。 strcpy只能复制字符串, 而memcpy/memmove可以复制任意内容,例如字符数组、整型、结构体、类等。
1. auto关键字 从c++11开始,auto关键字能够通过初始化器推导出变量的类型。在c++14中,auto关键字的能力进一步提升,能够通过return语句推导出函数的返回类型。...(make_pair(2, "b")); !...4. std::string_view string_view我最早使用的是boost版本的,c++17中的string_view 和 boost类似。...相比使用字符串指针,string_view做了更好的封装。 需要注意的是,string_view 由于没有原始字符串的所有权,使用string_view 一定要注意原始字符串的生命周期。...当原始的字符串已经销毁,则不能再调用string_view。 其他特性: 除此之外,C++17还增加了一些其他特性,文中没有一一列出。
根据艾瑞咨询在前段时间发布的《2019年中国K12教育To B行业研究报告》显示,培训机构在使用在线授课系统、教育直播系统之类的软件时,认为最实用的功能是课程录制和回放,另外课堂师生互动、课件资料共享等面授时不具备的功能点也是比较重点关注的功能了...接下来,我们将从用户对于教育直播系统的采购态度开始说起,来具体聊聊教育直播系统中最实用的功能和最大的几个问题。...这样的互动可比在直播间里发弹幕实用多了。 三、课件资料共享 按照笔者的理解,此项功能就等于在QQ群上传本次课程的文件一样,大家不仅可以在线观看,还能够下载到本地进行使用和修改。...一、互动 这里的互动包含两个方面,一个是线上老师和学生的互动,虽然教育直播系统为了提高互动率,已经加入了上文中提到的各类互动,但和“身临其境”相比,还是有一定的差距,因为毕竟很多的课堂活动是需要学员和学员...,学员和讲师一起完成的,是有可能需要物理接触的,并不是单靠线上交流就完事了。
语法糖 这里所说的语法糖,并不是严格意义上编程语言级别的语法糖,还包括一些能让代码更简洁更具有可读性的函数和库: 结构化绑定 c++17 最便利的语法糖当属结构化绑定。...std::tuple 的隐式推导 在 c++17 以前,构造std::pair/std::tuple时必须指定数据类型或使用std::make_pair/std::make_tuple函数,c++17...// pre c++17 std::pair p1{3.14, "pi"s}; auto p1 = std::make_pair(3.14, "pi"s); // ... mutex_; unsigned int value_ = 0; }; std::string_view std::string_view顾名思义是字符串的“视图”,类成员变量包含两个部分:字符串指针和字符串长度...,std::string_view 涵盖了 std::string 的所有只读接口。
前言 从C++11开始,标志着c++的复兴和现代C++的开端。尽管有各种新语言层出不穷,但涉及性能和系统层面c++仍然是首选,地位无可撼动。......... 1.auto关键字 从c++11开始,auto关键字能够通过初始化器推导出变量的类型。在c++14中,auto关键字的能力进一步提升,能够通过return语句推导出函数的返回类型。...std::tuple的隐式推导 在c++17以前,构造std::pair/std::tuple时必须指定数据类型或使用std::make_pair/std::make_tuple函数,c++17为std...// pre c++17 std::pair p1{3.14, "pi"s}; auto p1 = std::make_pair(3.14, "pi"s); //...,std::string_view涵盖了std::string的所有只读接口。
C++ 中文周刊 第79期 从reddit/hackernews/lobsters/purecpp知乎等等摘抄一些c++动态 周刊项目地址|在线地址 |知乎专栏 腾讯云+社区 弄了个qq频道,手机qq...Seastar的timer 用户态操作系统之六 Seastar的跨线程通信 seastar的一些代码走读。...这样实现更快,对于trival类型,这样优化的可以直接memcpy,更高效一些 大概实现成这个样子 template class optional.../指针是否有效 C++23’s new function syntax 一个简单的函数 [[nodiscard]] auto say_a_to( std::string_view what, std...没啥新奇的,但是c++23支持多维数组了,所以说operator[] 也算是一种函数了 比如 struct { [[nodiscard]] auto operator[]( std::string_view
A Dynamic Data Race Detector for Multithreaded Programs 有意思 Undefined Isn’t Unpredictable 简单说,就是未定义行为都是代码屎山...,所以可以根据屎的最初形态来找一些蛛丝马迹。。。...不太懂 Three new utility functions in C++23 std::unreachable();一看就懂 std::to_underlying 是这玩意 template 100); // 长类型 assert(std::string_view{typeid(short_type_t...).name()}.size() < 15); // 短类型 assert(std::string_view{typeid(typename_erasure).name
C++ 动态新闻推送 第8期 从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。...C++的一个UB行为 对一个UB的进一步探究 简单概括 负数浮点数转化给无符号整型是ub double dbl = -123.45; int d_cast0 = (unsigned int)dbl;...and the Magic String 讲了一个string_view到const char* 的bug // The Case of string_view and the Magic String...std::string msg = "Connie is learning C++"; auto untilFirstSpace = msg.find(' '); std::string_view...https://github.com/KDAB/KDToolBox Martin Vorbrodt - Case insensitive string, etc实现个大小写不敏感的string 直接看代码
::string_view(std::data(self), std::size(self)); const auto find = code.find(Name); return find !...= std::string_view::npos and code[find-1] !...::string_view">); static_assert(meta_contains); static_assert(meta_contains<"struct...没怎么看,不过我觉得是值得一看的 Aliasing: Risks, Opportunities and Techniques - Roi Barkan - C++ on Sea 2022 这里的aliasing...那么怎么从代码角度避免这种问题?
std::string_view系C++17标准发布后新增的内容,类成员变量包含两个部分:字符串指针和字符串长度,相比std::string, std::string_view涵盖了std::string...如果生成的std::string无需进行修改操作,可以把std::string转换为std::string_view,std::string_view记录了对应的字符串指针和偏移位置,无需管理内存,相对...第二个测试,我们看看string_view的substr操作: std::string_view str_view_str = "testing string_view related.....此外,std::string的substr是线性复杂度,依赖于字符串长度, std::string_view的substr是常数复杂度,不依赖于字符串长度,std::string_view的substr...std::string_view并不持有字符串的内存,所以它的生命周期一定要比源字符串的生命周期长,源字符串被消毁,行为未定义。
won't compile func(integer(3.4)); func(5); } 控制explicit行为 Did you know about typename erasure...,数组没对齐 C++ RTTI和LLVM RTTI使用方法和原理解析 打通游戏服务端框架的C++20协程改造的最后一环 在已有库上拓展c++20协程玩法,代码演进上的一些设计 分析RTTI...[idx]; } std::string_view table4(int idx) { constexpr static std::string_view array[] = {"a", "l",...constexpr能用就用 Vectors and unique pointers 使用unique_ptr和vector会遇到个坑爹的问题,从initializer_list 构造的没法move,坑爹...,也可以加群384042845和作者对线 Unilang deepin的一个通用编程语言,点子有点意思,也缺人,感兴趣的可以github讨论区或者deepin论坛看一看。
C++17标准库里面引入了轻量级的只读字符串表示类型string_view,用来替代const char* 和const string&,在传入函数的时候减小内存开销(因为string_view类只包含字符串的指针和字符串的长度值...使用方法与string一样,而且可以由string类型对象相互初始化,如下所示: std::string_view sv1("hello world"); std::string s1(sv1); std... int main() { std::string_view sv1("hello world"); std::string s1(sv1); std::cout...) << std::endl; return 0; } 在32位的机器下(x86),输出如下: size of string_view: 8 size of string: 28 因为string_view...而string是容器类型,内部结构我不太清楚,看输出整体是要比string_view大挺多的。
二、std::string_view 从名字出发,我们可以类比数据库视图,view表示该类型不会为数据分配存储空间,而且该数据类型只能用来读。...从函数列表来看,几乎跟string的只读函数一致,使用string_view的方式跟string基本一致。...在某些情况下,我们转为string_view可能仅仅是想用其中的一些函数,比如substr。...下面列出一些典型的问题情况: std::string_view sv = std::string{"hello world"}; string_view foo() { std::string...() { std::string s = "hello"; auto sv = id(s + " world"); } 四、总结 string_view解决了一些痛点,但同时也引入了指针和引用的一些老问题
C++ 动态新闻推送 第60期 从reddit/hackernews/lobsters/摘抄一些c++动态 周刊项目地址|在线地址 |知乎专栏 腾讯云+社区 弄了个qq频道,手机qq点击进入...忽略标题,一个协程的教程 a = b = c, a strange consequence of operator associativity 赋值返回的是个左值,所以还能继续赋值。...Do things with the my_foo pointer } return 0; } 如果你自己实现operator =,可能就有其他行为了 What’s up with std...::array{"Quantlab"}}> } https://godbolt.org/z/fqWo5nvTa 如何使用 GDB 分析 C/C++ Coroutine 值得一看 Changing...static constexpr std::array tokens{ Descriptors::token... }; static constexpr
截取子串 返回string对象 从StringPiece到string_view 备胎转正 API的差异 如果你没有C++14/17 序言 在brpc源码的src目录下,有一级子目录名为butil。...从StringPiece到string_view 备胎转正 在各个C++开源项目提供了不同版本StringPiece的许多年以后,事情开始有了变化。...进入标准以后,string_view的API和前面我提到到Chromium版StringPiece的API有一些变化。 从Piece到View,二者不完全相同,但也很像。...进入标准以后,string_view的API和前面我提到到Chromium版StringPiece的API有一些变化。...并且front()和back()返回的是 constexpr const_reference。当string_view为空的时候,此时调用front()和back()是未定义行为(UB)!
Google 评价 Abseil 为: 它是从 Google 内部代码块中抽取出来的一系列最基础的软件库。作为基本的组成部分,这些软件库支撑了几乎全部 Google 在运行的项目。...例如,Google 提供一个称为 StringPiece 的类型,随后 C++ 17 也添加了一个称为 std::string_view 的相近类型。...从底层机制上看,如果开发人员正在使用的是 C++ 17,那么 Abseil 的 string_view 默认为标准实现;如果开发人员正在使用的是 C++ 17 以前的版本,那么 string_view...使用 Abseil 的优点在于可以访问一些目前依然尚未添加到标准中的 C++ 特性,并且一旦这些特性被添加到 C++ 标准中,Google 保证会重构这些特性为默认使用标准实现。...memory:包括兼容 C++ 11 版本的 std::make_unique() 和内存管理。
compiler time的优化. std::type_index的实现一言难尽, 虽然你可以通过hash获取一个size_t类型的ID, 但对于这个值的稳定性和有效性都依赖于库底层的实现, 当一些特定的场合需要跨...::string_view pretty_name = name_detail(); std::string_view prefix = "static constexpr...const char* ecs::MetatypeHash::name_detail() [with T = "; std::string_view suffix = "]";...::string_view pretty_name = name_detail(); std::string_view prefix = "const char *__cdecl...} }; 这样一些不需要友好名字的地方我们可以使用name_detail(), 一些需要友好名字的地方, 我们使用name_pretty(), 至于hash(), 看自己的使用场合, 可以灵活选用
C++那些事之string_view 0.问题 string_view为c++17之后出现,其实就是leveldb中的slice,其目的在于解决内存拷贝、高效的substr。...1.内部实现 string_view是一个basic_string_view类型,可以看到_Traits采用默认的char_traits,这个很重要,后面的一些函数都采用char_traits的一些成员函数执行核心操作...从c++20开始支持starts_with、ends_with、contains,这三个在leveldb的slice中一开始就支持了。...std::string_view s = "abc\0\0def"sv; std::cout << "s: " << s.size() << " \"" << s << "\"\n"; 输出:s: 8..."abcdef" std::string_view str{"hello", 1}; std::cout << str.data() << std::endl; // 输出 hello,而不是h 这里预期输出
C++ 动态新闻推送 第31期 从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态 每周更新 周刊项目地址|在线地址 |知乎专栏 腾讯云+社区 欢迎投稿,推荐或自荐文章...直接看结论吧 We attempted to represent ownership and borrowing through the C++ type system, however the...static_assert(std::string_view{"07:36::22"} == std::string_view{__TIME__}); // will only pass at certin...time static_assert(std::string_view{"Sep 19 2021"} == std::string_view{__DATE__}); // will only pass...这里介绍folly在这方面做的一些工作,如何实现打印异步的堆栈 使用coroutine来搞。
只能说c++周边的演进还需要加快一些。周边文章咨询写的多一些,更通俗易懂一些,知道的人越多越好。...嘻嘻,甚至不用分析工具 完整报告可以去他们官网看。...说实话没怎么看懂 Regular Types 介绍 std::regular 的 看代码就懂了 template concept movable = is_object_v &&...::span start(int argc, char** argv) { static std::array argvElements...= []() -> std::array { std::array argvElements;
领取专属 10元无门槛券
手把手带您无忧上云