C ++ 11语法'type var:var'被称为'基于范围的'

时间:2016-11-28 13:23:36

标签: c++ c++11 syntax

在关于http://en.cppreference.com/w/cpp/locale/codecvt上看到的std::codecvt的示例中,有这样的语法:

for (char16_t c : str16)

知道str16是一个变量(l值)std::u16string str16

这是什么意思? 这就是我在标题中称之为type var : var的内容。

PS:是否有一个引用所有特定语法类型的主题?罕见的?

最近我看到了:

int ackermann(m,n)
int m,n; 
{
    // function definition
}

3 个答案:

答案 0 :(得分:3)

for (char16_t c : str16)

上面的语法定义了一个基于范围的for循环(在C ++ 11中引入)。它基本上说:

  

循环遍历str16中的每个字符,将字符复制到名为c的变量中,并允许我使用它。

例如:

for (char16_t c : str16)
{
    std::cout << c << std::endl;
}

你的第二个例子是K&amp; R风格的C函数定义,并且已经过时了。有关详细信息,请参阅此处:Function declaration: K&R vs ANSI

答案 1 :(得分:0)

这称为range-based for。这是自C ++ 11以来遍历整个容器的非常常见的习惯用法。

答案 2 :(得分:0)

for (char16_t c : str16)是C ++ 11中引入的新的ranged-for循环语法,有很多例子和解释。