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

在C++中传递对文字的引用会发生什么?

在C++中,传递对文字的引用会发生什么?

在C++中,字符串字面量(如"Hello, World!")是一个字符数组,其中最后一个字符是空字符'\0'。当我们传递一个字符串字面量的引用时,我们实际上是传递一个指向该字符串的指针。由于字符串字面量是常量,因此我们不能通过该指针修改字符串的内容。

例如,以下代码将会编译失败:

代码语言:cpp
复制
void foo(const char*& str) {
    str = "Hello, World!";
}

int main() {
    const char* p = "Hello";
    foo(p);
    return 0;
}

这是因为我们不能将一个指向常量的指针赋值给一个非常量指针。要解决这个问题,我们可以将函数参数更改为常量指针:

代码语言:cpp
复制
void foo(const char* const& str) {
    // ...
}

或者使用C++11的using声明:

代码语言:cpp
复制
void foo(std::string_view str) {
    // ...
}

这样,我们就可以在函数中使用字符串字面量,而不必担心修改它们的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java字符串是通过引用传递

这是一个经典java问题。stackoverflow上,许多类似的问题已经被问过了,但是许多回答是错误或不完整。 如果你不想深入思考的话,这个问题很简单。...x 存储了堆"ab"字符串引用。...因此,当x作为参数传递到change()方法时候,它仍然堆"ab",如下所示: ? 因为java是按值传递,x值是"ab"引用。...他们很清楚,java是按值传递,但是这里出了什么问题? 3.这段代码到底做了什么? 上面的解释有几处错误。为了更容易理解,我们最好简单过一下整个流程。...当x被传递给change()方法时,实际上是x值(一个引用一个副本。方法change被调用后,创建另一个对象"cd",它有着一个不同引用。方法内局部变量x值变成了"cd"引用

6.2K50

Lua实现UE4 C++代码自动补全

Lua作为一门游戏领域大众,非游戏领域小众语言(甚至如果不是云风大力推广,Lua可能在游戏领域可能更小众一些),UE4Lua也并不提供原生支持。...我们项目接入是slua-unreal,可以提供UE4进行Lua开发基础支持。 不过,如何能够保证UE4进行Lua开发效率?Lua能够像C++或者C#一样支持代码补全和跳转吗?...原理 EmmyluaUnity函数自动补全 如果你使用Unity+Lua开发,可能在一些工具和插件已经见识过Lua对于Unity函数自动补全。...通过定义时变量打标签(UPROPERTY、UFUNCTION等),UE4会通过UHT来静态扫描代码,从而生成.generated.h和.gen.cpp文件,并通过static构造方式,使得生成文件...同理,我也可以获取到这个类所有UProperty。 PS: 这个遍历会将本类和其所有父类字段都遍历一遍。如果不加处理,最终生成临时文件非常大,严重影响IO速度和整体生成速度。

6.1K32

c和c++区别 (三)const&(引用)和const*(地址)函数应用

&a=GetInt();//错误 //引用初始化值要能取地址,寄存器没有地址 修改为:const int& a=GetInt(); return 0; } 二、返回局部变量地址...//不能返回局部变量地址或引用 int* GetIntPtr(){ int value=10; //const int value=10;是数据,.data段,这种情况可以返回地址...int value=10; return &value; //lea eax,[value] } int main(){ int *&p=GetIntPtr();//错误,引用初始化值要能取地址...//修改为常引用:int* const&p=GetIntPtr(); return 0; } 四、返回局部变量引用 //不能返回局部变量引用 int& GetIntRef(){...int a=GetIntRef(); *eax->p } 五、返回指针地址、返回指针引用 int** GetIntPtrPtr(){ static int data=10;

1.1K10

面试题5:jdk1.8,HashMapput方法,如何实现?Map什么情况扩容?什么情况转成红黑树?

其次:如果数组下标位置没有元素,则将key和value封装为Entry对象(JDK 1.7是Entry对象,JDK 1.8是Node对象),并放入该位置。...如果是JDK 1.8,则会先判断当前位置上Node类型,是红黑树Node还是链表Node。...如果是红黑树Node,则将key和value封装为一个红黑树节点并添加到红黑树中去,在这个过程中会判断红黑树是否存在当前key,如果存在则更新value值。...如果是链表Node,则将key和value封装为一个链表Node并插入到链表尾部。...这个插入尾部过程,需要遍历链表,如果发现存在相同key,则更新value,否则执行插入操作,当链表节点个数超过了8个,且数组大于等于64,则会将该链表转化为红黑树。

21820

n-tier理论数据层间是如何传递什么是BO,DO,PO,VO,DTO,BoDto,DoDto?

层间数据传递 马克-to-win:一 个数据库表对应一个PO(Persistant Object),这好理解。...Web层网页,当用户提交表单数据以后,Controller层,把表单数据放在VO(View Object有人也叫Value Object) 当中,接着调用Service层。...马克-to-win:Service层接着调用BO,BO调用DO,(这个过程 应该是涉及业务范围越来越小,越来越具体,就像中央委托给东北局,东北局再委托给辽宁省,处理某个事一样),DTO在这个过程承载数据量也必然越来...马克-to-win:代码量代码复杂度和系统性能之间做取舍是我们工程师永恒的话题。技术教 大家,大家起码可以有做选择机会。...只有大家符 合一套严格规矩,更换人员,变换需求时,才能应付自如。

92420

C++中指针和引用区别

C++,指针和引用经常用于函数参数传递,然而,指针传递参数和引用传递参数是有本质上不同: 指针传递参数本质上是 值传递方式,它所传递是一个地址值。...而在引用传递过程, 被调函数形式参数虽然也作为局部变量开辟了内存空间,但是这时存放是由主调函数放进来实参变量地址。...引用是操作受限了指针(仅容许取内容操作)。 ★《高质量C/C++编程指南》6.6     引用C++概念,初学者容易把引用和指针混淆一起。...相反,如果变量肯定指向一个对象,例如你设计不允许变量为空,这时你就可以把变量声明为引用。 “但是,请等一下”,你怀疑地问,“这样代码产生什么后果?”...而在除此之外其他情况下,则应使用指针。 C++ const引用详解 (1) 实际程序引用主要被用做函数形式参数--通常将类对象传递给一个函数.引用必须初始化.

4.9K82

c++面试选择题_C语言经典笔试题

允许派生类基类虚函数重新定义。 纯虚函数作用:基类为其派生类保留一个函数名字,以便派生类根据需要对它进行定义。作为接口而存在,纯虚函数不具备函数功能,一般不能直接被调用。...这时,被调函数形参就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数形参变量操作就是其相应目标对象(主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...而引用更容易使用,更清晰。 9.什么时候需要使用“常引用”?  如果既要利用引用提高程序效率,又要保护传递给函数数据不在函数中被改变,就应使用常引用。...第29题:基类析构函数不是虚函数,带来什么问题? 派生类析构函数用不上,造成资源泄漏。 第30题:全局变量和局部变量有什么区别?是怎么实现?操作系统和编译器是怎么知道

1.1K10

C++经典面试题(最全,面率最高)

允许派生类基类虚函数重新定义。 纯虚函数作用:基类为其派生类保留一个函数名字,以便派生类根据需要对它进行定义。作为接口而存在 纯虚函数不具备函数功能,一般不能直接被调用。...这时,被调函数形参就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数形参变量操作就是其相应目标对象(主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...而引用更容易使用,更清晰。 9.什么时候需要使用“常引用”? 如果既要利用引用提高程序效率,又要保护传递给函数数据不在函数中被改变,就应使用常引用。...29题:基类析构函数不是虚函数,带来什么问题? 【参考答案】派生类析构函数用不上,造成资源泄漏。 30题:全局变量和局部变量有什么区别?是怎么实现?操作系统和编译器是怎么知道

1.1K30

CC++面试题之语言基础篇(一)

static第三个作用是默认初始化为0.和全局变量一样存储静态数据区。 说说静态变量什么时候初始化? 对于C语言全局和静态变量,初始化发生在代码执行之前,属于编译期初始化。...而内联函数本质上是一个函数,比如有返回值、参数列表等 宏函数是预编译期做简单字符串替换 ;而内联函数则是在编译期进行代码插入 宏定义是没有类型检查,无论还是错都是直接替换;而内联函数在编译时候进行类型检查...传参方式有这三种:值传递引用传递、指针传递传递:形参即使函数体内值发生变化,也不会影响实参值; void foo(int x) { x = x * 2; // 修改是副本,不会影响原始数据...} 引用传递:形参函数体内值发生变化,影响实参值; void bar(int &x) { x = x * 2; // 修改原始数据 } 指针传递指针指向没有发生改变前提下,形参函数体内值发生变化...)+移动语义 完美转发(Perfect Forwarding):右值引用允许函数参数精确传递参数值类别(左值或右值)。

19110

Java开发岗面试题--基础篇(一)

引用数据类型在被创建时,首先会在栈上分配空间,将其引用存在栈空间中,然后开辟内存,值存放在堆内存,栈引用指向堆地址。 Java数组有没有length()方法?...静态变量无法访问非静态变量 非静态变量可以访问静态变量 值传递引用传递区别是什么?...值传递方法调用过程,实参把它实际值传递给形参,此传递过程就是将实参值复制一份传递到函数。...引用传递引用传递弥补了值传递不足,如果传递数据量很大,直接复过去的话,会占用大量内存空间,而引用传递就是将对象地址值传递过去,函数接收是原始值首地址值。...try{}里有一个return语句, 紧跟在这个try后finally{}里 code会不会被执行? 什么时候被执行? 执行,return前执行。详情请看下面代码和运行结果。

1.9K40

JAVA初级岗面试知识点——基础篇

25、hashCode 与 equals 26、抽象类和接口区别是什么 27、什么是接口 28、静态变量与非静态变量区别 29、值传递引用传递区别是什么 30、什么是反射 31、String 类中常用方法...而引用数据类型在被创建时,首先会在栈上分配空间,将其引用存在栈空间中,然后开辟内存,值存放在堆内存,栈引用指向堆地址。...值传递方法调用过程,实参把它实际值传递给形参,此传递过程就是将实参值复制一份传递到函数。...引用传递引用传递弥补了值传递不足,如果传递数据量很大,直接复过去的话,会占用大量内存空间,而引用传递就是将对象地址值传递过去,函数接收是原始值首地址值。...1、Lock 是接口,而 synchronized 是 Java 关键字,synchronized 是内置语言实现; 2、synchronized 发生异常时,自动释放线程占有的锁,因此不会导致死锁现象发生

45220

火爆全网JAVA面试题及答案汇总|第一部分Java基础知识点

4、Java 语言特点? 5、什么是字节码,字节码好处? 6、Java 和 C++ 区别? 7、Java三大特性? 8、Java基本数据类型和引用数据类型及其区别?...27、抽象类和接口区别是什么? 28、什么是接口? 29、静态变量与非静态变量区别 30、值传递引用传递区别是什么? 31、什么是反射? 32、String 类中常用方法?...值传递方法调用过程,实参把它实际值传递给形参,此传递过程就是将实参值复制一份传递到函数。...引用传递引用传递弥补了值传递不足,如果传递数据量很大,直接复过去的话,会占用大量内存空间,而引用传递就是将对象地址值传递过去,函数接收是原始值首地址值。...Lock 是接口,而 synchronized 是 Java 关键字,synchronized 是内置语言实现; synchronized 发生异常时,自动释放线程占有的锁,因此不会导致死锁现象发生

41330

Go 指针与引用:值传递和址传递

: 0xc000048080 *ptr 指针值: 100 *ptr 指针值: 200 *ptr 没有操作,为什么发生了变化 ptr 是指针类型,并被赋予了 num 内存地址,当num值发现变化时...引用C++概念,初学者容易把引用和指针混淆一起。以下程序,n是m一个引用(reference),m 是被引用物(referent)。...上面的程序看起来象文字游戏,没有体现出引用价值。...引用主要功能是传递函数参数和返回值。 C++语言中,函数参数和返回值传递方式有三种:值传递、指针传递引用传递。 “引用传递性质像“指针传递”,而书写方式像“值传递”。...实际上“引用”可以做任何事情“指针”也都能够做,为什么还要“引用”这东西? 答案是“用适当工具做恰如其分工作”。 指针能够毫无约束地操作内存的如何东西,尽管指针功能强大,但是非常危险。

1.6K20

EasyC++33,引用与const

如果我们想要传递引用,但又不希望函数内部引用变量进行修改,以免影响外部变量。我们可以使用常量引用,也就是加上const修饰符。...double sqrt(const double &x); 由于我们加上了const修饰符,当我们函数内部引用进行修改时候,触发编译器报错。...除了表达式之外,如果变量类型不匹配也一样创建临时变量。这些临时变量只会在函数调用期间存在,函数运行结束之后,编译器会将其删除。 为什么会有这样设计呢?...= 3, b = 5; swapr(a, b); 早期C++没有严格限制情况下,这段代码会发生什么呢?...所以后来版本C++优化了这个问题,禁止了传递引用时创建临时变量。而当引用有const修饰时并不会对原值进行修改,并不会影响逻辑和结果,所以豁免了这个禁令。

14910

java参数传递方式话题终结实例

参考链接: 如何在Java传递参数 java新手入门面临一个经典的话题,本文意在终结这个话题,java中有说法:Java里面参数传递都是按值传递,怎么理解这句话?...用文字说明恐怕不容易说明白,说明白恐怕也难以想明白。  前提  先明确一下,按值还是按引用概念,它是来自c++语言,引用不是汉语词典一个词,而是c++概念——“&”这个符号还记得吧? ...为什么有这个话题呢?其一,是引用传递理解不透彻;其二,诸多java书籍及讨论论点并没有切中要害。...��  一句话概括,按值传参还是按引用传参,既然是参数传递方式,那么只针对形参和实参,这里说是参数本身,不是参数对象子对象或孙子对象。 ...按引用传递,那么函数内修改了形参指向一个新对象,外面的实参也变了。  旨在说明问题,代码可能有内存泄漏。

53920

java参数传递方式话题终结实例

java新手入门面临一个经典的话题,本文意在终结这个话题,java中有说法:Java里面参数传递都是按值传递,怎么理解这句话?用文字说明恐怕不容易说明白,说明白恐怕也难以想明白。...前提 先明确一下,按值还是按引用概念,它是来自c++语言,引用不是汉语词典一个词,而是c++概念——“&”这个符号还记得吧? 为什么有这个话题呢?...其一,是引用传递理解不透彻;其二,诸多java书籍及讨论论点并没有切中要害。?...一句话概括,按值传参还是按引用传参,既然是参数传递方式,那么只针对形参和实参,这里说是参数本身,不是参数对象子对象或孙子对象。...按引用传递,那么函数内修改了形参指向一个新对象,外面的实参也变了。 旨在说明问题,代码可能有内存泄漏。

37710

每日算法题:Day 6

思路: 我们大家都知道整数计算机是以二进制形式来存储,因此对于正数或者负数都是0或1数字组成。...res : / res; } }; 2 概念题 【C/C++引用传递和值传递区别 值传递: 编译系统会在调用该函数地方,把实参复制一份传给函数形参。...因此如果形参进行修改,其实质是修改实参副本,而实参本身不发生变化!但这样由于副本拷贝需要系统资源,效率很低。 引用传递: 编译系统会在调用该函数地方,直接将实参内存地址(指针)传给形参。...因此形参和实参共同拥有同一块内存,因此函数参数进行修改,实参也跟着修改。并且引用传递时规定引用不为空,因此需要在使用时指针进行判断。 C++参数一般使用引用传递(比如类或者结构体)!...因为sizeof值在编译时确定,所以不能用来得到动态分配(运行时分配)存储空间大小。 【C/C++】指针和引用什么区别呢?

34720

C++面试题汇总 (一)

C++多态性具体体现在运行和编译两个方面:程序运行时多态性通过继承和虚函数来体现;   程序编译时多态性体现在函数和运算符重载上;  虚函数:基类冠以关键字 virtual 成员函数。...允许派生类基类虚函数重新定义。  纯虚函数作用:基类为其派生类保留一个函数名字,以便派生类根据需要对它进行定义。作为接口而存在 纯虚函数不具备函数功能,一般不能直接被调用。 ...这时,被调函数形参就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数形参变量操作就是其相应目标对象(主调函数操作。  ...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...而引用更容易使用,更清晰。  什么时候需要使用“常引用”?  如果既要利用引用提高程序效率,又要保护传递给函数数据不在函数中被改变,就应使用常引用

83720

Golang函数传参存在引用传递吗?

Go slice 传入函数时到底是不是引用传递?如果不是,函数内为什么能修改其值?...值传递传递是指在调用函数时将实际参数复制一份传递到函数,这样函数如果参数进行修改,将不会影响到实际参数。 概念总给人一种教科书感觉,写点代码验证下。...图中 &a 表示a地址,值为: 0xc420080008 引用传递 所谓引用传递是指在调用函数时将实际参数地址传递到函数,那么函数参数所进行修改,将影响到实际参数。...main定义一个引用,然后传给函数 rFoo,那么来看看正统引用传递什么?...如果go存在引用传递,形参 s 地址应该与实参 s1 一样(上面c++证明),通过实际情况我们发现它们具备完全不同地址,也就是传参依然发生了拷贝——值传递

2.2K20

C++引用作函数参数 | 传送变量别名

C++引用作函数参数 C++之所以增加引用类型,主要是把它作为函数参数,以扩充函数传递数据功能。  小林之前推文中介绍过函数参数传递两种情况。...将变量名作为实参和形参,这时传给形参是 变量值,传递是单向。如果在执行函数期间形 参发生变化,并不传回给实参。因为调用函 数时,形参和实参不是同一个存储单元。 ...C++这种虚实结合方法仍然是值传递方式,只是实参值是变量地址而已,C++提供了向函数传递数据第3种方法:传送变量别名。 经典案例:C++实现传送变量别名。...留个问题给读者思考,这种传送变量别名和使用指针变量作形参时有什么区别?...以上,如果你看了觉得你有所帮助,就给小林点个赞叭,这样小林也有更新下去动力,跪谢各位父老乡亲啦~ C++引用作函数参数 | 传送变量别名 更多案例可以go公众号:C语言入门到精通

1.4K88

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券