【发布时间】:2012-12-20 17:58:49
【问题描述】:
C++ 标准对等式运算符== 有如下说明:
[C++11: 5.10/1]:[..] 两个相同类型的指针比较相等当且仅当它们都为空,都指向同一个函数,或者都代表同一个地址。 p>
我最初的解释是,在这个级别上,函数本身在语义上没有“地址”,因此“或两者都表示相同的地址”只能指代对象,而不是函数。否则何必纠结于“指向同一个函数”子句呢?
也就是说,两个相同类型的函数指针比较相等当且仅当它们都指向同一个函数,句号。
这样做的结果是this question 中的行为(指向两个不同但相同的函数的指针具有相同的值)将是一个实现错误,因为指向不同函数的指针需要是唯一的。
我感觉这是该子句的意图,但我无法客观地捍卫这样一种观点,即这应该是实际推断段落含义的方式,或者它确实是委员会的意图,现在是我的解释has come into question:
[D] 与我讨论“[...] 或两者如何代表同一个地址。”对 Visual C++ 的行为不满意。 (@jstine)
所以我的问题是关于这个标准段落的意图。
要么:
我在正确的轨道上:函数指针必须比较相等iff它们都指向同一个函数(“地址”该死),或者
文中存在冗余:函数指针必须比较相等iff它们都指向同一个函数或都代表同一个地址;并且,通过扩展,允许实现使两个函数存在于同一地址。
这是什么?
【问题讨论】:
-
这是一个棘手的问题=P
-
@alex:谢谢,但我的意思是iff。
-
此要求将有效地强制模板膨胀。
-
不在乎。语言律师可以对此进行辩论,但实际上我认为它不会影响实际程序。
-
@brian:affected Mehrdad's 已经够好了。
标签: c++ language-lawyer