相关疑难解决方法(0)

C++中的" - >"运算符是什么?

看完后隐藏功能和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.标准中定义了哪里,它来自何处?

c++ code-formatting standards-compliance operators

8590
推荐指数
27
解决办法
75万
查看次数

对std :: vector的迭代:unsigned vs signed index变量

在C++中迭代向量的正确方法是什么?

考虑这两个代码片段,这个工作正常:

for (unsigned i=0; i < polygon.size(); i++) {
    sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

for (int i=0; i < polygon.size(); i++) {
    sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)

产生warning: comparison between signed and unsigned integer expressions.

我是C++世界的新手,所以unsigned变量对我来说有点可怕,我知道unsigned如果使用不正确,变量会很危险,所以 - 这是正确的吗?

c++ unsigned signed stl

452
推荐指数
10
解决办法
75万
查看次数

在反向迭代向量

我需要迭代从结尾到beginnig的向量."正确"的方式是

for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
    //do Something
}
Run Code Online (Sandbox Code Playgroud)

当doSomething涉及了解实际索引时,需要使用rit进行一些计算以获得它,就像 index = v.size() - 1 - (rit - v.rbegin)

如果无论如何都需要索引,那么我坚信最好使用该索引进行迭代

for(int i = v.size() - 1; i >= 0; --i)
{
    //do something with v[i] and i; 
}
Run Code Online (Sandbox Code Playgroud)

这会发出一个i已签名v.size()且未签名的警告.改为

for(unsigned i = v.size() - 1; i >= 0; --i) 在功能上是错误的,因为这实际上是一个无限循环 :)

什么是美学上很好的方式来做我想做的事情

  • 没有警告
  • 不涉及演员阵容
  • 并不过分冗长

我希望我不是在寻找不存在的东西:)

c++ iteration stl

33
推荐指数
4
解决办法
3万
查看次数

是否将下溢的无符号整数与-1定义良好?

考虑以下:

size_t r = 0;
r--;
const bool result = (r == -1);
Run Code Online (Sandbox Code Playgroud)

结果初始化的比较是否result具有明确定义的行为?正如我所期待的那样,
结果true如何?


这个Q&A的写作是因为我不确定有两个因素.
在我的回答中,它们都可以通过使用术语"关键[ly]"来识别.

此示例的灵感来自于计数器未签名时的循环条件方法:
for (size_t r = m.size() - 1; r != -1; r--)

c++ language-lawyer unsigned-integer c++11 signed-integer

22
推荐指数
2
解决办法
946
查看次数