我有一个函数,它可以使用任意数量的指向自定义类的指针,这些指针在很大程度上是使用new进行实例化的。
示例:
addListItems(
new Item(1, 2, 3),
NULL);
这很有效。但是,只要我在Item
上调用init函数,就像这样:
addListItems(
new Item(1, 2, 3)->initMoreStuff(4, 5, 6),
NULL);
我的编译器抛出了错误:'expect')'之前' - >'令牌。 我一做到:
addListItems(
(new Item(1, 2, 3))->initMoreStuff(4, 5, 6),
NULL);
它停止抱怨。我已经尝试过与BCB 6完全相同的代码而没有任何问题,那么为什么GCC会抱怨这个呢?
如果我使用制造商功能或将结果放在' new'在将变量添加到函数之前变为变量,它也可以工作。
将new
的电话放入括号会产生任何可能的副作用吗?
答案 0 :(得分:3)
->
has higher precedence than new
,因此您的原始版本被解析为
new (Item(1, 2, 3)->initMoreStuff(4, 5, 6))
在语法上无效。看起来BCB 6错了。
答案 1 :(得分:3)
它归结为解析。您需要括号表示->
适用于 new-expression 的结果,而不是临时构造Item(1, 2, 3)
。这是因为->
has higher precedence than new
除了上下文语法问题外,new Item(1, 2, 3)
和(new Item(1, 2, 3))
之间绝对没有语义差异。
最后,如果" BCB6"接受你的原始代码然后它是错误的(并且非常引人注目)。