C++,构造函数限制

Pie*_*e86 10 c++ constructor

我正在研究C++,我无法理解下面粗体句子的含义:

来自IBM手册:

以下限制适用于构造函数和析构函数:

  • 构造函数和析构函数没有返回类型,也不能返回值.
  • 引用和指针不能用于构造函数和析构函数,因为它们的地址不能被使用.
  • 无法使用关键字virtual声明构造函数.
  • 构造函数和析构函数不能声明为static,const或volatile.
  • 联合不能包含具有构造函数或析构函数的类对象.

你能给我举个例子吗?谢谢!

P S*_*ved 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
Run Code Online (Sandbox Code Playgroud)

理由是这样的:

  1. 构造函数不返回任何内容(尽管可能会认为它返回一个初始化对象的函数).它作为成员函数的返回类型是什么?
  2. 构造函数实际上不是一个成员函数,因为它不能在一个对象上调用(比如s.member()).
  3. 可能会为每个构造函数和析构函数创建几个实际函数.一个构造函数可能会分配内存,另一个可能不会(但仍以相同的方式初始化类成员).一个析构函数可能会破坏基础子对象,另一个可能不会.在源代码编译器中的每个ctor/dtor调用中选择实际的"低级"ctor/dtor来调用; 这个选择是在编译时做出的.如果通过指针调用它,则无法完成.
    可能意味着"他们的地址不能被采取".


And*_*bel 11

您不能创建指向构造函数的函数指针(或引用).