我不明白为什么从类型为
换句话说,既然我可以将任意
int (*)(const int&)
的函数指针到类型为int (*)(int&)
的指针进行static_cast
是不合法的。如果我有一个函数指针,在技术上允许接受int&
,但想要分配给它一个自愿放弃修改所指值权限的函数,难道它不能像原则上可以的函数一样表现出特例吗?换句话说,既然我可以将任意
int&
传递给int (*)(const int&)
函数,那么在标准中是否存在更深层次的原因,导致后者不能被视为int (*)(int&)
的一个特例并分配给这样的变量?
M(!W)E:int g(const int& q) {
return q;
}
int main() {
int (*f)(int&) = static_cast<int(*)(int&)>(g); // breaks
int x = 1;
return f(x);
}
static_cast
的工作原理。它们是完全不同的类型,所以它们不会很快一起工作。如果你使用了reinterpret_cast
,那么它会编译,因为它的工作方式不同,但这是未定义的行为,我不建议使用它。 - skypjackreinterpret_cast
(我知道,这是未定义行为,但实际上在我使用的所有编译器中都能正常运行)。 - geza