【发布时间】:2019-07-26 10:11:36
【问题描述】:
我知道构造函数没有返回类型。虽然我想知道,那么构造函数的类型是什么?构造函数有类型吗?
我试过了
struct A { A() {} };
template <typename A> struct foo;
int main() { foo< decltype(&A::A) > f; }
获取错误(gcc)
prog.cc: In function 'int main()':
prog.cc:5:32: error: taking address of constructor 'constexpr A::A(A&&)'
5 | int main() { foo< decltype(&A::A) > f; }
| ^
prog.cc:5:35: error: template argument 1 is invalid
5 | int main() { foo< decltype(&A::A) > f; }
| ^
...好吧,好吧,我无法获取地址。这也失败了:
int main() { foo< decltype(A::A) > f; }
与
prog.cc: In function 'int main()':
prog.cc:5:32: error: decltype cannot resolve address of overloaded function
5 | int main() { foo< decltype(A::A) > f; }
| ^
[...]
这可能只是一个非常令人困惑的错误消息,原因与上述相同(无法获取构造函数的地址),我不知道还能尝试什么..
构造函数的类型是什么?
如果它没有类型,那它是什么?当然不是A (member_function)()。
PS:澄清我的困惑:cpprefernce states
构造函数是一个特殊的非静态成员函数 用于初始化其类类型的对象。
我的逻辑是这样的:成员函数有一个类型,构造函数是特殊类型的成员函数,因此它们应该有一个类型。我知道推理是有缺陷的,但为什么呢?
【问题讨论】:
-
@foreknownas_463035818 因为它不是函数...
-
"一个
int没有返回类型,它的类型是int"多么传奇 -
通常“特殊”表示一般规则的一些例外情况,这就是其中之一。另一个是你不能直接调用它,另一个是你不能获取它的地址,还有一个是它没有名称用于名称查找。
-
@SuperSimplePimpleDimple 请保持优雅。称某人为“bufoon”对任何人都没有帮助,并且可能会标记您原本有用的评论。
-
@SuperSimplePimpleDimple 仅仅因为某些东西以与函数相同的方式实现“低级”,并没有说明它的类型。 C++ 类型是一个纯粹的理论概念,不应与常见的 C++ 实现处理它们的方式相混淆。
标签: c++ constructor member-function-pointers name-lookup