究竟是如何工作的?

use*_*958 2 c++ for-loop reference c++11

for当我弄清楚它是如何工作的时候,我正在阅读关于"范围"的陈述.

下面是一个将字符串转换为大写的程序.

string s("Hello World!!!");

//convert s to uppercase

for( auto &c :s )  // for every char in s
   c= topper(c);   //  c is a reference,so the assignment changes the 
                   //  char in s
cout<< s << endl;
Run Code Online (Sandbox Code Playgroud)

对字符串的引用(即,c)是如何将元素更改为upppercase的?

我已经搜索了迭代如何在这里工作,但我找不到答案.

Vit*_*meo 6

这段代码

for (auto& c : s)
{
    c = toupper(c); 
}
Run Code Online (Sandbox Code Playgroud)

粗略地翻译成这个

for (auto it = std::begin(s); it != std::end(s); ++it)
{
    auto& c = *it;
    c = toupper(c);
}
Run Code Online (Sandbox Code Playgroud)

这是一个基本的迭代器循环,涵盖在任何初学C++书籍中.


cppreference有一个更详细和准确的解释.