【发布时间】:2011-07-25 05:36:34
【问题描述】:
以下代码在控制台打印什么?
map<int,int> m;
m[0] = m.size();
printf("%d", m[0]);
可能的答案:
- 未定义代码的行为,因为未定义编译器首先执行的语句
m[0]或m.size()。所以它可以打印1和0。 - 它打印
0,因为赋值运算符的右侧首先执行。 -
它打印
1,因为operator[]具有完整语句m[0] = m.size()的最高优先级。因此,会发生以下一系列事件:-
m[0]在地图中创建一个新元素 -
m.size()被调用,现在是1 -
m[0]被分配了先前返回的(通过 m.size())1
-
真正的答案?,这是我不知道的^^
【问题讨论】:
-
嗯,它当然与
[]运算符的优先级无关,因为这与这里无关。除此之外,我不知道答案。好问题。 -
+1 提出一个非常好的问题
-
与大多数这些问题一样,您为什么还要这样做?
-
@jk:出于好奇。了解语言的限制是很好的,这样您就可以在实际代码中很好地避开它们。