看完后隐藏功能和C++/STL的暗角上comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作.
这是代码:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设这是C,因为它也适用于GCC.标准中定义了哪里,它来自何处?
请使用以下两行代码:
for (int i = 0; i < some_vector.size(); i++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
some_iterator++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我被告知第二种方式是首选.这究竟是为什么?
Bjarne Stroustrup在C++编程语言中写道:
无符号整数类型非常适合将存储视为位数组的用途.使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意.通过声明无符号变量来确保某些值为正的尝试通常会被隐式转换规则所取代.
size_t似乎是无符号的"再获得一位代表正整数".那么这是一个错误(或权衡),如果是这样,我们应该在我们自己的代码中最小化它的使用吗?
Scott Meyers的另一篇相关文章就在这里.总而言之,他建议不要使用无符号in接口,无论值是否总是正数.换句话说,即使负值没有意义,也不一定要使用无符号.
在STL库中,一些容器具有迭代器,并且通常认为它们是迭代这些容器的优越方式,而不是简单的循环,例如
for ( int i=0; i < vecVector.size(); i++ )
{
..
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么以及在什么情况下我应该使用迭代器以及在什么情况下上面的代码片段?