首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c++ string_view

在C中指针是完成这一目的的标准数据结构,而C++引入了安全性更高的引用类型。所以在C++中若传递的数据仅仅只读,const string&成了C++的天然的方式。...实际上我们本意并不是要改变原字符串,为什么不在原字符串基础上返回呢? 在C++17中引入了string_view,能很好的解决以上两个问题。...s); 基本上都是自解释的,唯一需要说明的是:为什么我们代码string_view foo(string("abc"))可以编译通过,但为什么没有对应的构造函数?...引入的背景, 2.2 自定义字面量 自定义字面量也是C++17新增的特性,提高了常量的易读。...3.string_view指向的内容的生命周期可能其本身短 string_view并不拥有其指向内容的所有权,用Rust的术语来说,它仅仅是暂时borrow(借用)了它。

31320

C++17,标准库有哪些新变化?

首先看看 std::string_view. std::string_view std::string_view 代表一个字符串的非所有权引用(即不负责管理引用字符串的生命周期),他表示的是一个字符序列...u16string_view std::basic_string_view std::u32string_view std::basic_string_view 你也许会有疑问:为什么我们需要...C++ string 的 std::string_view(strView变量), 而第16行代码中创建的 std::string_view(strView2变量) 引用的则是字符数组.在第9行代码中...示例代码的输出已经在注释中写明了.代码第 12 行创建了一个 std::vectorstd::any,你必须使用 std::any_cast 来获取其中的元素,如果你向 std::any_cast 传递了错误的数据类型...0(第一个指定类型 int 的默认初始).第7行代码中我将整型12赋值给了v,后面我们可以通过 std::get(v) 来获取该.第9行到11行代码中,我使用了3种方式将v中的数值赋值给了w. std

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

C++17 在业务代码中最好用的十个特性

std::cout << key << ": " << value << std::endl;     }(); } 在 clang 环境下,可以在 lambda 表达式捕获时显式引入一个引用变量通过编译...// from https://stackoverflow.com/a/40129046 // author: Pavel Davydov // string_view的remove_prefixconst...同时 try_emplace 在参数列表中将 key 和 value 分开,因此进行原地构造的语法emplace更加简洁 std::map m; /...只有当对类型完全未知的情况下,才应当使用std::any,比如动态类型文本的解析或者业务逻辑的中间层信息传递。...常用于可能失败的函数的返回中,比如工厂函数。在 C++17 之前,往往使用T*作为返回,如果为nullptr则代表函数失败,否则T*指向了真正的返回

2.4K20

C++ 动态新闻推送 第39期

month(11) == thanksgiving.month()); static_assert(day(25) == thanksgiving.day()); 正确使用cpu提供的TSC 能得到gettimeofday...更快的速度,但rdtsc也有代价,这里做个小科普 A footnote on “Three reasons to pass std::string_view by value” 之前说到,尽量用string_view...就是简单的接口用编译期测试来组合,尽可能constexpr,然后直接static_assert测试 #include #include #include <...string支持contains方法 string从nullptr构造会直接报错 module 话说module发音是妈桌我一直发音成麻豆 一些速度提升 io支持 std::print 干掉iostream,printf...这个很经典了,就是rocksdb的status类那种形式 stacktrace 应该就是boost哪个库 byteswap 这个是std::endian之后的引入 to_underlying对枚举拿到背后的

42630

JDK8 String类知识总结「建议收藏」

索引引用字符代码单位,因此补充字符在字符串中使用两个位置。 除了处理Unicode代码单元(即字符)的方法外,String类还提供了处理Unicode代码点(即字符)的方法。...,StringBuilder,加号拼接的本质) 一、String对象的不可变性 1.String为什么是不可变的 文档中提到: 字符串是常量;它们的在创建后不能更改。...当我们使用类似String s = "a"这样的代码创建字符串常量的时候,JVM会先检查“a”这个字符串是否在常量池中: 如果存在,就直接将此String对象地址赋给引用s(引用s是个成员变量,它在虚拟机栈中...实际上,执行完以后对象在内存中的情况是这样的: 3.小结 使用new或者字面值形式创建String时都会根据常量池是否存在同对象而决定是否在常量池中创建对象 使用字面值创建的String,引用直接指向常量池中的对象...在可能的情况下,建议优先使用此类而不是StringBuffer,因为在大多数实现中它会更快

38720

c++17好用的新特性总结

有兴趣的朋友可以看看下面两篇文章: 《c++ inline variable 内联变量 c++17》 《GCC,Clang 在C模式,较低优化等级下,链接器对内联函数报未定义错误,为什么?》...{ std::cout << key << ": " << value << std::endl; }(); } 在clang环境下,可以在lambda表达式捕获时显式引入一个引用变量通过编译...同时try_emplace在参数列表中将key和value分开,因此进行原地构造的语法emplace更加简洁。...只有当对类型完全未知的情况下,才应当使用std::any,比如动态类型文本的解析或者业务逻辑的中间层信息传递。...常用于可能失败的函数的返回中,比如工厂函数。在C++17之前,往往使用T*作为返回,如果为nullptr则代表函数失败,否则T*指向了真正的返回

3K10

【翻译】C++17的新特性简介

新特性一览 语言新特性 类模板的模板参数推断 用auto来声明非类型的模板参数 折叠表达式 auto对花括号初始化的新推断规则 Lambda的常量表达式形式 Lambda可以捕获this了 内联变量...this了(Lambda capture this by value) 之前的时候在Lambda中捕获的this只能是引用形式的。...一个有问题的例子是对于引用捕获,Lambda要求其对象必须确实存在,但有可能到了调用的时候已经超过了目标对象的生命周期。...UTF-8字符字面量的与它的ISO 10646标准的字符点相同。...是对一个字符串的非拥有的引用,可以运用成员函数自由地改变观测这个字符串的方式,构造速度很快但是无法修改这个字符串。

2.9K10

C++17中新特性

2. lambda表达式 lambda也是c++11中引入的,在C++11中,lambda表达式只能用捕获this,this是当前对象的一个只读的引用。...当我们通过函数创建一个对象时,通常使用通过函数返回错误码,而通过出参返回对象本身。...如果通过optional返回创建的实例,就会变得更加直观, std::optional 提供了下面几个方法: has_value() // 检查对象是否有 value() // 返回对象的...,不存在时则抛出 std::bad_optional_access 异常 value_or() // 存在时返回,不存在时返回默认 3. std::any 一个类型安全的可以保存任何的容器...string_view可以理解成原始字符串一个只读引用string_view 本身没有申请额外的内存来存储原始字符串的data, 仅仅保存了原始字符串地址和长度等信息。

4.8K30

浅谈软件开发的性能提升

如果需要再对象的新拷贝上进行操作的情况下,建议直接使用obj方式 String接口的优化 不推荐使用const String&(除非调用方确保有现成的String对象); 如果不需要修改字符串内容,可以使用string_view...最好选择传递引用,而不是传递。 运算表达式优化 在运行过程中,尽量把常量合并到一起。...在除法、取余运算情况下,unsigned ints(无符号类型)会快于 signed ints(有符合类型) 除法中,除以常量会比除以变量效率高,因为可以在编译期做优化,尤其是常量可以表示成2^n时...浮点除法乘法慢很多,所以可以利用乘法来代替除法运算,这样可以提高代码性能。 内存优化 程序在运行时,占用内存越少,那么它的运行效率也就更快,也说明程序的运行性能较好。...9、可以通过使用智能指针代替指针的使用。 10、优化动态库文件的加载,尽量避免不必要的IO操作。

89320

30道最常问的Java基础面试题

字符型常量和字符串常量的区别****形式上:** 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符**含义上:** 字符常量相当于一个整形(ASCII),可以参加表达式运算 字符串常量代表一个地址...对象的相等与指向他们的引用相等,两者有什么不同?**对象的相等 的是内存中存放的内容是否相等而引用相等 比较的是他们指向的内存地址是否相等。**25....当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的和要创建的相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个String对象。...Java中的传递引用传递****传递**是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为传递的时候,实际上是将实参的复制一份给形参。)...**引用传递**是指对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象的改变会反映到所有的对象上。(因为引用传递的时候,实际上是将实参的地址复制一份给形参。)

28010

手把手教你深入理解cc++中的指针

指针是c语言为什么如此流行的一个重要原因,正是有了指针的存在,才使得c/c++能够可以使用其他语言编写出更为紧凑和有效的程序,可以说,没有掌握指针,就没有权利说自己会用c/c++.然而。...一,内存和地址 我们知道,计算机内存的每个字节都有一个唯一的地址,CPU每次寻址就是通过固定的步长(这就解释了为什么需要内存对齐)来跳跃进行寻址的。...a的地址,也就是2000,当我们想通过p来操纵a的话,首先要根据p保存的地址找到它指向的内容,也就是解引用*p,当*p的内容放生改变的时候,首地址为2000的内存单元存储的也会做出改变,因此变量当*p...因此对q进行解引用也即*q得出的是p,也就是2008,再对(*q)进行解引用也即*(*q)得出的才是变量a的,由于运算符的结合性自右向左,因此括号可以省略,也即**q才是a的。...为什么是这样呢?这是因为[]的优先级*要高。p1 先与[]结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。

46231

深挖String

存储引用数据类型的引用 堆存储对象 对象的地址是栈中的引用 为了让你更好的理解 我这里把学习引用传递 传递时候的理解写到下面 一定要理解透彻 很重要!...你知道传递引用传递的区别吗 答案1这里需要注意形参和实参的传递 否则容易出事故 答案2其实只有传递确切的来说是地址传递 下面分析下图带大家更好的理解 回答这道题你首先得知道什么是传递 什么是引用传递...肯定是传递 这里就会有人很疑惑 究竟啥玩意儿,咋tm和我看的定义不一样 所有不需要深挖概念 下面我告诉你答案 其实只有传递 确切来说是地址传递 为什么这样说呢?...基本数据类型是直接接受 引用数据类型接受堆中的地址 这也是为什么传递对象之间修改会改变实参 而new对象的话实参对象不会修改的原因 这里抛出一个问题: 我在学习时 看到这样一句话:String...有的话直接返回地址引用 没有的话需要把堆中对象引用复制到字符串常量池再返回常量池的引用 三、通过上面的学习,刚才的问题就迎刃而解了 一、 String str = new String("Joseph

18920

C++引用

引用 #include int main() { const int a = 10;//a是常量 int& ra = a;//a是常量不可以被改变,这里引用等于ra可以被改变也就等于...int& b = 10;10本身是一个常量不能被修改,直接引用也是不可以的。...int d = 10; double& rd = d;//不同类型的不可以 这里为什么不同类型的不可以呢?...传、传引用效率比较 以作为参数或者返回类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用作为参数或者返回类型,效 率是非常低下的...有多级指针,但是没有多级引用。 访问实体方式不同,指针需要显式解引用引用编译器自己处理。 引用指针使用起来相对更安全。

30900

Java学习笔记(2)——数据类型

所以针对这些类型,Java采取了与C和C++相同的方法,也就是说,不用new来创建变量,二是创建一个并非是引用的“自动”变量。这个变量直接存储“”并置于常量区中,因此更加高效。...(事实上,Integer类的缓存上限是可以通过修改系统来更改的。了解就行了,不必去深究。) ? 缓存机制 为什么引入缓存机制 这回到了为什么引入基础类型这个特例的问题上。...引发的问题:传递还是引用传递? java是传递还是引用传递的呢?毫无疑问,java是传递的。那么什么又叫传递引用传递呢? 我们先来看一个例子: ?...例子 这是一个很经典的例子,我们希望调用了swap函数以后,a和b的可以互换,但是事实上并没有。为什么会这样呢? 这就是因为java是传递的。...传递的过程中,changgeAge也有洁癖,于是复制了一份小明的引用,这个副本也指向小明。 然后changgeAge通过自己的副本引用,改变了小明的年龄。

59930
领券