在构造函数成员初始化之前调用成员函数的语法
Syntax to call a member function before constructor member initialization
我见过类似下面的代码,用于在调用构造函数之前调用成员函数。 _data 的构造函数初始化在构造函数之前调用成员函数'function()'。
class foo
{
public:
foo();
private:
int *_data;
void function();
};
foo::foo() :
_data((int *)(function(), NULL))
{
std::cout << "foo::constructor called" << std::endl;
}
void foo::function()
{
std::cout << "foo::function called" << std::endl;
}
int main()
{
foo * _foo = new foo;
delete _foo;
return 0;
}
输出:
foo::function called
foo::constructor called
我不太了解 _data 构造函数初始化的语法。如果您执行以下操作:
foo::foo() :
_data((int *)function())
您收到类型转换错误:
C2440:'type cast':无法从 'void' 转换为 'int *'
谁能解释一下这是怎么回事?
foo::foo() :
_data((int *)(function(), NULL))
这是 comma operator。
... a binary operator that evaluates its first operand and discards the result, and then evaluates the second operand and returns this value (and type).
所以(int *)(function(), NULL)
先调用function()
然后returnsNULL
.
然后 NULL
被转换为 int*
并用于初始化 _data
。
此构造使用 comma operator 来实现其效果。
在评估 (function(), NULL)
时,它首先评估 function
,然后是 NULL
。表达式的总体结果是 NULL
,然后转换为 int *
。因此,_data
被初始化为 NULL
.
我见过类似下面的代码,用于在调用构造函数之前调用成员函数。 _data 的构造函数初始化在构造函数之前调用成员函数'function()'。
class foo
{
public:
foo();
private:
int *_data;
void function();
};
foo::foo() :
_data((int *)(function(), NULL))
{
std::cout << "foo::constructor called" << std::endl;
}
void foo::function()
{
std::cout << "foo::function called" << std::endl;
}
int main()
{
foo * _foo = new foo;
delete _foo;
return 0;
}
输出:
foo::function called
foo::constructor called
我不太了解 _data 构造函数初始化的语法。如果您执行以下操作:
foo::foo() :
_data((int *)function())
您收到类型转换错误: C2440:'type cast':无法从 'void' 转换为 'int *'
谁能解释一下这是怎么回事?
foo::foo() :
_data((int *)(function(), NULL))
这是 comma operator。
... a binary operator that evaluates its first operand and discards the result, and then evaluates the second operand and returns this value (and type).
所以(int *)(function(), NULL)
先调用function()
然后returnsNULL
.
然后 NULL
被转换为 int*
并用于初始化 _data
。
此构造使用 comma operator 来实现其效果。
在评估 (function(), NULL)
时,它首先评估 function
,然后是 NULL
。表达式的总体结果是 NULL
,然后转换为 int *
。因此,_data
被初始化为 NULL
.