gpt4 book ai didi

c++ - 空字符串加一个整数?

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

这是我的部分代码:

//num is an int
string s = "" + num;

当我在 Macbook 上的 Xcode 中运行它时,s 将被分配给一个奇怪的字符串。任何人都可以向我解释一下吗?我真的很困惑。谢谢。

最佳答案

我假设 string指的是std::string类型,在标准标题中声明 <string> .您还没有将其作为上下文 - 从技术上讲,根据您提供的信息,它可能是前面的 typedef或宏。

原因的解释

string s = "" + num;

给出一个“奇怪的字符串”是""在内存中表示为 const一个数组 char其值为零。在表达式 "" + num 中, ""转换为指针(等于 char 的地址,值为零),并且 + num然后给出内存中某个位置的地址,num之后的字符。

如果num非零,该内存地址可能不存在,或者(如果存在)可能包含任意数据。

在任何情况下,该指针都会传递给 std::string 的构造函数(为了构造 s )。该构造函数从给定的地址开始,并不断将数据复制到 std::string 中。直到碰巧找到一个值为零的字符。中间的字符可以是任何东西 - 它们是恰好位于该内存位置的任何东西。

形式上,C++ 标准将所有这些(通过错误指针访问数据)描述为未定义的行为。这意味着 C++ 标准没有说明允许的结果是什么,所以任何结果都是允许的。它可能会导致您的字符串中出现奇怪的数据。操作系统可能会检测到您的程序正在访问它不应该访问的内存,并强制终止您的程序。它可以重新格式化您的硬盘并重新安装您的操作系统。

假设你只想写 num到一个字符串(例如 num 与值 42 导致像 "42" 的字符串),然后通常的技术是转换 numstd::string .例如;

 std::string s = to_string(num);   // C++11 or later

 #include <sstream>            //  pre_C++11 (albeit valid in C++11)
std::ostringstream ostr;
ostr << num;
std::string s(ostr.str());

关于c++ - 空字符串加一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689977/

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