gpt4 book ai didi

c++ - 在构造函数成员初始化之前调用成员函数的语法

转载 作者:搜寻专家 更新时间:2023-10-31 01:41:03 25 4
gpt4 key购买 nike

我见过类似下面的代码,用于在调用构造函数之前调用成员函数。 _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:“类型转换”:无法从“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() 然后返回 NULL

然后将 NULL 转换为 int* 并用于初始化 _data

关于c++ - 在构造函数成员初始化之前调用成员函数的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28881377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com