2016-11-28 47 views
-3

在看到的http://en.cppreference.com/w/cpp/locale/codecvt关于std::codecvt一个例子,有以下语法:C++ 11语法 '型无功的:var' 被称为 '基于范围关于'

for (char16_t c : str16)

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

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


PS:还有一个话题引用的所有特定语法类型?稀有的?

最近我看到:

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

这是[范围为'for'循环]的语法(http://en.cppreference.com/w/cpp/language/range-for) – CoryKramer

+2

显示的语法在你的例子中是古老的(如'int ackermann(m,n) int m,n;'),老实说,除非你使用80年代/ 90年代的遗留代码。 'for(char16_t c:str16)'是一个基于循环的范围,它可以被认为是str16中的每个char16_t c,在循环的定义中'c'将是当前的char。 – George

+0

这是一个基于范围的循环 – Rerito

回答

2
for (char16_t c : str16) 

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

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

例如:

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

你的第二个例子是K & R-C风格函数定义,并且是过时的。请参阅此处以获取更多信息:Function declaration: K&R vs ANSI

+0

谢谢。链接到http://en.cppreference.com/w/cpp/language/range-的参考链接也很有用,就像@ starl1qgt给出的一样 – Sandburg

0

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

+0

尽管大部分都是正确的(除了“新”),但这个答案没有用,尤其是对于更有帮助的其他答案 – anatolyg

+0

您是什么意思的“除了新的”?它在C++ 11中是新的。 – lousybyte

+0

我想你可以说在C++ 11中是新的。这是5(近6)岁。在很久之前,语法在许多编译器中作为语言扩展存在。 –