我有以下一段代码。
#include <string>
#include <ctype.h>
std::string lowerCase(const std::string &exprName)
{
std::string dummy(exprName);
char firstChar = tolower(exprName.at(0));
dummy.replace(0, 1, &firstChar);
return dummy;
}
当我使用 GDB 单步执行代码并在第 6 行中断时 (std::string dummy(exprName)),我希望 dummy 为空。但是当我使用打印它时
p dummy
GDB 以下列方式打印变量的值
Breakpoint 1, lowerCase (exprName=...) at Utility.cpp:49
49 std::string dummy("");
(gdb) print dummy
$1 = {
static npos = 18446744073709551615,
_M_dataplus = {
<std::allocator<char>> = {
<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
members of std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider:
_M_p = 0x634261 "Expr * input2 = facade->derefE(facade->varE(v));\nNode * subject = f->"
}
}
另外,如果我进入下一行代码,即
char firstChar = tolower(exprName.at(0));
我在 GDB 中打印“dummy”的值,它的值保持不变并且不会更改为 exprName 的值。我打印了“exprName”,它肯定包含不同的值!
这很莫名其妙!为什么 dummy 不会被初始化为与 exprName 相同的值?