【发布时间】:2018-10-19 15:55:53
【问题描述】:
有什么区别:
void (* const algorithm)();
和
void const (* const algorithm)();
在处理const 指向静态方法的指针时?
我知道如果指针指向不应修改的内存,则使用const 是有意义的,如果是指向变量的指针,如this answer 中所述。但是,函数地址在运行时是否不是有效的常量?
我问这个的原因是,作为函数参数的 second 选项不起作用。
编辑
这是没有编译的代码。
struct A {
static void a() {}
};
void b(void const (* const callback)()) {}
int main() {
b(&A::a); // No matching function for call to 'b'
}
如果函数a() 的返回类型为const void,则上述示例有效。
【问题讨论】:
-
离题:在处理函数指针时最好使用
typedef或using。我发现即使是简单的也令人困惑。盯着你的声明看了几分钟,直到我放弃了:P -
第二,你的函数返回
const void这没有意义... -
你能显示你说的代码不起作用以及你得到的错误吗?使用两者中的任何一个时我都无法重现错误
-
@user463035818 但从不 typedef 指针。如果需要,请键入函数类型,并在指针上显式使用星号。
-
不知道,虽然语言已经够复杂了,那为什么要为
const void制定一个特殊规则呢?无论如何它都没用?
标签: c++ function-pointers const-pointer