在调用构造函数之前,我已经看到类似下面的代码用于调用成员函数。 _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:&#39;输入&#39; :无法转换为&#39; void&#39;到&#39; int *&#39;
有人能解释一下这里发生了什么吗?
foo::foo() :
_data((int *)(function(), NULL))
答案 0 :(得分:3)
...一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型)。
因此(int *)(function(), NULL)
首先调用function()
,然后返回NULL
。
然后将NULL
转换为int*
并用于初始化_data
。
答案 1 :(得分:0)
此构造使用comma operator来实现其效果。
评估(function(), NULL)
时,首先评估function
,然后NULL
。表达式的总体结果为NULL
,然后将其转换为int *
。因此,_data
初始化为NULL
。