gpt4 book ai didi

c++ - 字符串赋值

转载 作者:行者123 更新时间:2023-11-30 01:40:47 26 4
gpt4 key购买 nike

我无法理解字符串中某些特定的赋值行为。

//method 1
std::string s;
s+='a' //This works perfectly

但是

//method2
std::string s;
s="" + 'a';//This gives unexpected value

为什么第二种方法给出了意想不到的值(value)?从我读过的内容来看,如果没有指定构造函数,则字符串默认构造函数将字符串变量初始化为空字符串。 而 s+='a' 应该与 s=s+a 相同。那么为什么方法2和方法1不一样呢?

还有一个关于同一主题的查询,如果我们不能用 char 文字初始化一个字符串,那么我们如何为它分配一个 char 文字?

std::string s2='a'//gives error while compiling

鉴于

std::string s2;
s2='a'//works perfect

据我了解,我们不能通过 char 变量初始化字符串变量,因为字符串构造函数需要 (const char *) 类型的参数。为什么分配时没有这样的限制?

最佳答案

对于您的第一个查询,

方法 1 非常有效,因为在此方法中您添加了字符串对象类型和字 rune 字。并且 s+='a' 确实与 s=s+'a'

相同

关注 s 是字符串对象类型而不是字符串字面量这一事实。

在第二种方法中,您要添加字符串文字和字 rune 字。关注两者之间的区别,第一种方法中有字符串对象,您可以将字符串或字 rune 字添加到字符串对象类型,这是字符串对象类型提供的功能之一。但是您不能简单地将文字相加。在 c++ 中,但是 "StringLiteral1""StringLiteral2"将导致两个字符串文字的连接。

对于第二个查询,

初始化与赋值不同,字符串对象默认构造函数使用const char * 来初始化。作业是一个完全不同的故事(如果不是,请有人纠正我)。

关于c++ - 字符串赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com