gpt4 book ai didi

c++ - std::string resize 正在破坏比较运算符 (==)

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:16 26 4
gpt4 key购买 nike

std::string resize 导致看似相等的字符串不再相等。当我将鼠标悬停在调试器中的变量上并且它们似乎具有相同的值时,这似乎会产生误导。

我认为这归结为我希望 == 运算符在第一个空字符处停止,但它一直持续到大小结束。我确信这是按预期工作的,但我被困在由此引起的问题上有一段时间了,所以我想看看为什么你会在第一个空字符之后继续比较字符。谢谢!

int main(void)
{
std::string test1;
test1.resize(10);
test1[0] = 'a';

std::string test2 = "a";

//they are not equal
bool same = (test1 == test2);

return 0;
}

最佳答案

test1 是字符串 "a\0\0\0\0\0\0\0\0\0"test2 是字符串"a"。它们不相等。

std::string 可以包含空字符。它的长度不是到第一个空字符的距离。它还保证包含字符串字符的内存缓冲区以超出其长度的附加空字符 1 结尾。

如果您不打算让字符串更长而只是想要内存,请使用 std::string::reserve。请注意,您不能使用 [] 合法地访问末尾以外的元素,但是在您超过保留限制之前,向后推或其他任何操作都不会导致任何新的内存分配。

关于c++ - std::string resize 正在破坏比较运算符 (==),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659005/

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