【问题标题】:Comma operator usage [duplicate]逗号运算符的用法[重复]
【发布时间】:2012-10-30 12:37:41
【问题描述】:

可能重复:
Is it possible to declare two variables of different types in a for loop?

考虑这段代码:

for( std::vector<std::string>::iterator it = myVec.begin(), int i = 3; it < myVec.end(); it++, i++ )
{
// some operations with the vector
}

我很惊讶 MSVC 2010 在编译这个 for 循环时给了我错误。 MSVS 禁止使用逗号运算符吗?

这是一个错误:

error C2062: type 'int' unexpected 
error C2143: syntax error: missing ';' before ')'

如果我尝试将“int i”定义排除在循环之外,我会得到:

error C2440: 'initializing': cannot convert from 'int' to 'std::vector'

【问题讨论】:

  • 您在尝试将其排除在外时输入错误。如果您不显示该代码,我们将无法帮助您修复它。
  • @Mat,似乎一切都井井有条。刚检查。谢谢。
  • “一切似乎都井井有条” - 如果是,你的编译器不会告诉你它不是。
  • 我必须同意马特的观点。我编写了与您的代码非常相似的代码,并且编译时没有错误或警告。 (当然是在 MSVC 中)

标签: c++ visual-studio comma comma-operator


【解决方案1】:

你不能在 for 循环中声明两种不同的数据类型,所以你需要将向量或 i 推入循环内,但你可以分配值

【讨论】:

    【解决方案2】:

    comma operator 应该有两个 表达式 作为操作数。在它的右侧,您有int i=0,它看起来像一个声明,而不是一个表达式

    如果您删除该int,您将声明一个名为istd::vector&lt;std::string&gt;::iterator 变量,并使用不进行类型检查的3 对其进行赋值或构造。

    实际上,将 int i=3; 声明移到您的 for 循环之前(和移出)。

    【讨论】:

    • +1 没有“看起来像”。它 is 是一个声明(对 OP),除非它是第一个且单数的,否则它不能存在(在 for 循环的初始化表达式中只允许一个合格的 decl 类型,最后我检查了.
    • 我不知道我们是否可以说它一个声明。 C++ 编译器拒绝(正确地)解析它,因此我们不能说它对编译器的声明,只是在这种情况下,它看起来像声明对人类。
    • 对不起。对于OP,它一个decl,对于编译器,它是一个无效的初始化表达式=P
    猜你喜欢
    • 2020-12-31
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2018-03-30
    • 2018-02-23
    • 2018-07-17
    • 2013-05-27
    相关资源
    最近更新 更多