“如果想改变string对象中字符的值,就必须把循环变量定义成引用类型。”
写了代码进行验证。
std::string s = "hello";
for (auto c : s)
{
std::cout << c ;
}
for (auto c : s) //这里的c只是一个按值传递的复制品
{
if (isupper(c))
{
c = (char)tolower(c);
}
}
得到的运行结果也是支持书的说法。string对象没有被修改
(unsigned __int64)是string::type size的类型。如何在c++中查看变量类型请看这篇博客。
将循环变量改为引用类型,其中每个c会是对s一个元素的引用。
for (auto &c : s) //这里的c是对s序列每个元素的引用
{
if (isupper(c))
{
c = (char)tolower(c);
}
}
代码正确运行,修改了string对象。