我正在研究C ++,我无法理解下面粗体句子的含义:
来自IBM manual:
你能告诉我一个例子吗? 谢谢!以下限制适用于构造函数和析构函数:
- 构造函数和析构函数没有返回类型,也不能返回值。
- 引用和指针不能用于构造函数和析构函数,因为它们的地址无法使用。
- 无法使用关键字virtual声明构造函数。
- 构造函数和析构函数不能声明为static,const或volatile。
- 联合不能包含具有构造函数或析构函数的类对象。
答案 0 :(得分:24)
句子意味着您不能将指针指向构造函数或析构函数。这是一个例子:
class Sample{
private: int x;
public: Sample() { x = 100; };
public: void* member() { x = 200; };
};
template <class X>
void call_me(Sample s, X function){
(s.*function)();
};
call_me(s, &Sample::member); //valid
call_me(s, &Sample::Sample); //invalid
call_me(s, &Sample::~Sample); //invalid
理由是这样的:
s.member()
)。答案 1 :(得分:11)
您不能创建指向构造函数的函数指针(或引用)。
答案 2 :(得分:1)
第一个猜测是你不能创建一个引用或指向构造函数/析构函数的指针。当然,在这种情况下(如果可能的话)“引用或指针”将具有引用成员或指向成员类型的类型,因为这些成员函数不是静态的。然而,由于一个原因,这种解释是有问题的:在C ++中,没有诸如成员引用这样的东西。
基本上,在这种解释中提及“引用”没有任何意义:你不能引用任何类的非静态成员函数,无论它是否是是否为构造函数/析构函数。在C ++中根本没有这样的东西。
如果上述解释是正确的(正如其他答案也提出的那样),那么更有意义(但仍然不是完美)的措辞将是
在这种情况下提及“引用”毫无意义。
答案 3 :(得分:-1)
他们不能是静态的或虚拟的