C :将结构传递到函数,无法理解语法
C++: passing a structure to a function, cannot understand syntax
对不起,标题非常糟糕,但我真的不知道该写什么。
我在C 中具有以下库neural_network.h:
class Network{
public:
struct Settings
{
uint32_t m_numInputs;
uint32_t m_numHidden;
uint32_t m_numOutputs;
};
Network(Settings const& settings);
}
然后,在neural_network.cpp文件中,它通过以下方式实现:
Network::Network( Settings const& settings )
: m_numInputs( settings.m_numInputs )
, m_numHidden( settings.m_numHidden )
, m_numOutputs( settings.m_numOutputs )
{
assert( settings.m_numInputs > 0 && settings.m_numOutputs > 0 && settings.m_numHidden > 0 );
InitializeNetwork();
InitializeWeights();
}
我不太了解为什么我确实需要:: m_numinputs(settings.m_numinputs),m_numhidden(settings.m_numhidden) ,m_numoutputs(settings.m_numoutputs)之后。它的目的是什么?
它称为 initializer list ,只能在构造函数上使用。它的效果大致相同
this->m_numInputs = settings.m_numInputs;
this->m_numHidden = settings.m_numHidden;
this->m_numOutputs = settings.m_numOutputs;
构造体主体内部。
最重要的区别是,初始化器列表也适用于const
成员和参考(在这种情况下是必需的,因为您无法以通常的方式分配给这些成员)。这是因为初始化器列表直接调用成员的构造函数,而不是首先默认构造它们,然后调用分配运算符。
它的目的是什么?
to 初始化类的数据成员。
这称为初始化列表。
A 构造函数在初始化列表中而不是在其体内初始化其类的数据成员。
阅读更多信息,为什么我要使用成员初始化列表?
例如,此:
Network::Network(Settings const& settings) : m_numInputs(settings.m_numInputs)
将将数据成员m_numInputs
设置为settings.m_numInputs
。以下情况也会发生:
Network::Network(Settings const& settings) {
m_numInputs = settings.m_numInputs;
}
那是初始化列表。
基本上,这是在构造中初始化类成员的标准C 语法,该部分是在构造函数之前执行的。
这样做的是,将传递的settings
参数的三个成员数据开始初始化Network
类的三个成员数据。
话虽如此,我认为您的class Network
在您展示时并不完整吗?您显示的Network
类没有该数据成员。我认为完整的定义应该看起来像这样:
class Network{
public:
struct Settings
{
uint32_t m_numInputs;
uint32_t m_numHidden;
uint32_t m_numOutputs;
};
Network(Settings const& settings);
private:
unit32_t m_numInputs,
unit32_t m_numOutputs,
unit32_t m_numOutputs
};
旁注:如果Network
的数据成员与Settings
的数据成员具有相同的名称,这确实使您感到困惑,那么这确实是一个设计决定或纯粹的巧合,不必这样做。
一个更简单的示例,可以展示如何使用构造函数参数来初始化初始化列表中的数据成员。
class Foo {
private:
int m_x,
int m_y,
public:
Foo(int dataA, int dataB);
};
Foo::Foo(int dataA, int dataB): m_x(dataA), m_y(dataB)
{ }
- QMetaObject invokeMethod的基于函数指针的语法
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++使用 rand 定义函数语法
- C++中未命名函数指针的语法
- 将值传递给构造函数 c++ 的差异语法
- C++语法中的函数指针
- 存储函数指针的正确语法
- QObject::连接不起作用 - 使用函数语法找不到信号
- 对函数库中的语法感到困惑 std::bind
- 解释通过从函数引用返回数组的语法
- 函数错误 C2059:语法错误:'>'不起作用
- 当C++类函数参数之一是结构时,它们的语法有什么不同
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 需要"模板<>"语法 --> 通过函数调用类模板
- C++ std::函数语法问题
- 备用函数语法/函数原型
- 奇怪的c++语法:函数调用之前的类型定义
- c++数组语法(函数返回数组)
- 实现[B,C]=f(A)语法(函数f作用于具有两个或多个输出数组的数组)