У меня есть код, который, кажется, работает, хотя у меня плохое предчувствие.
Мой class Node
имеет закрытых членов:
// Node properties
std::string m_keySymbol = "";
float m_nodeWeight = 0.0f;
std::string m_displaySymbol = "";
// Ultimately will be either 0x00 or 0x01. This is a starting and testable value.
//std::uint8_t m_branchBitValue = 0xFF;
// Node relationships
Node* mp_parentNode = nullptr;
//std::pair<Node*, Node*> mp_childNodes = { nullptr, nullptr };
NodeBranches m_nodeBranches;
bool m_nodeHasBranches = false;
и метод с определением :
Node::Node(Node& left, Node& right) {
m_keySymbol = left.m_keySymbol + right.m_keySymbol;
m_nodeWeight = left.m_nodeWeight + right.m_nodeWeight;
m_displaySymbol = left.m_displaySymbol + right.m_displaySymbol;
m_nodeHasBranches = true;
m_nodeBranches.left.first = const_cast<Node*>(&left);
m_nodeBranches.left.second = 0x00;
m_nodeBranches.right.first = const_cast<Node*>(&right);
m_nodeBranches.right.second = 0x01;
left.mp_parentNode = this;
right.mp_parentNode = this;
}
Моя специфика c касается последних двух строк Node::Node(Node& left, Node& right)
и, в частности, где я использовал this
в качестве значения.
В main()
работает следующий код:
// Start the combining process.
Node cb(nodesVector[0], nodesVector[1]);
std::cout << "Address of cb: " << std::hex << &cb << std::endl;
std::cout << "Parent node of nodesVector[0]: " << std::hex << nodesVector[0].GetParentNode() << std::endl;
, то есть адрес cb
совпадает с возвращенным nodesVector[0].GetParentNode()
, что возвращает mp_parentNode
.
Я посмотрел и не могу найти пример где this
используется в качестве значения rvalue, даже если оно определено как выражение prvalue со свойствами свойства rvalue.
Я что-то упустил?