C++ 标准对等式运算符有以下说明==
:
[C++11: 5.10/1]:
[..]相同类型的两个指针比较相等当且仅当它们都是空的,都指向同一个函数,或者都表示相同的地址。
我最初的解释是,在这个级别上,函数本身在语义上没有“地址”,因此“或两者都表示相同的地址”只能指代对象,而不是函数。否则为什么要使用“指向相同的功能”条款呢?
也就是说,两个相同类型的函数指针比较相等当且仅当它们都指向同一个函数,句点。
这样做的结果是,在这个问题中看到的行为(指向两个不同但相同的函数的指针具有相同的值)将是一个实现错误,因为指向不同函数的指针需要是唯一的。
我觉得这是该条款的意图,但我无法客观地捍卫这样一种观点,即这就是应该如何推断段落的含义,或者这确实是委员会的意图,现在我的解释受到质疑:
[D] 与我讨论如何“[...] 或两者都代表同一个地址。” 对 Visual C++ 的行为不满意。(@jstine)
所以我的问题是关于这个标准段落的意图。
任何一个:
我在正确的轨道上:函数指针必须比较相等,如果它们都指向同一个函数(“地址”该死),或者
这段话有一个冗余:函数指针必须比较相等,当且仅当它们都指向同一个函数或都表示同一个地址;并且,通过扩展,允许实现使两个函数存在于同一地址。
它是哪一个?