将其他指针类型作为参数的 C++ 多态函数void *
:它被认为是模棱两可的吗?
我担心,由于可以将任何指针转换为void*
,下面的第二次调用 bar 会在下面的程序中执行void bar(void*)
而不是我的预期void bar(int*)
吗?
我在我的 g++ 上进行了测试,它按预期运行(即 int* 不会被强制转换为 void*)。但是,任何人都可以就 C++ 语言规范对这个问题发表评论/回答吗?
富.h:
class Foo {
public:
void bar(void *);
void bar(int *);
};
主.cpp:
...
struct A *p1;
int *p2;
Foo foo;
...
foo.bar(p1);
foo.bar(p2);
此外,比方说,bar
现在是虚拟多态函数,将void*
参数作为第一种形式,将基抽象类指针参数作为第二种形式。以派生类指针作为参数的调用会执行第一种形式还是第二种形式?即派生类指针会被转换为它的基抽象类指针(因此第二种形式将起作用),还是void *
在调用之前将其转换为(因此第一种形式将起作用)bar()
?