有没有保证只有名称不同的函数(也不是参数和返回类型)不能在C和C++中共享相同的地址?我在标准中没有看到任何相关内容.
#include <cassert>
void foo() {}
void bar() {}
int main()
{
assert(foo != bar);
}
Run Code Online (Sandbox Code Playgroud)
C++ 11标准说
5.10等式运算符
可以比较相同类型的指针(指针转换后)是否相等.相同类型的两个指针比较相等,当且仅当它们都为空时,都指向相同的函数,或者两者都表示相同的地址(3.9.2).
如果你没有任何指向函数的指针,它们可能只有相同的地址,但我们不知道.如果你是比较指针两种不同的功能,它们不能比较相等.
混淆的一个原因可能是已知MSVC编译器将模板函数的代码组合在一起,恰好为不同类型(如int和long)生成相同的机器代码.这不合规.
但是,这适用于具有不同签名的功能,而不是这个问题的确切含义.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |