【发布时间】:2014-06-18 04:25:21
【问题描述】:
首先我在做,
#include <iostream>
#include <string>
void foo (std::string s) {
std::cout << s << std::endl;
}
int main () {
char st[] = "0";
st[1] = '[';
std::string s (st);
std::cout << s << std::endl;
return 0;
}
当我使用流插入运算符发送到流对象cout 时,它显示垃圾(猜测这是正常行为)。
然后我通过按值传递给函数foo 进行检查。
我现在正在做这样的事情。
foo (s);
// after calling foo () value printed by the
// std::cout is changed. it takes care of NULL character ('\0')
std::cout << s << std::endl;
0[ 之后不再显示垃圾信息。为什么?
我的问题是,
我按值传递了foo () 中的字符串。在运行 foo () 的主体之前运行一个复制构造函数。但仍然没有意义。这个copyctor如何通过值改变从main ()传递的参数?
提前致谢。
【问题讨论】:
-
未定义的行为,因为您破坏了字符串。
-
在调试器中打开你的程序,看看
st指向什么。那你就知道了。 -
当你删除它时,我正在回答你关于 ISR 的问题!