假设我有以下功能:
void myFunc(P& first, P& last) {
std::cout << first.child.grandchild[2] << endl;
// ...
}
现在,我们假设first.child.grandchild[2]
对我来说太长了。例如,假设它经常出现在myFunc(P&,P&)
内的方程中。所以,我想在函数内部创建一些符号引用,这样我的方程就不那么杂乱了。我怎么能这样做?
特别要考虑以下代码。我需要知道我可以插入什么语句,这样不仅 line_1a 的输出总是与 line_1b 的输出相同,而且 的输出也是如此strong> line_2a 始终与 line_2b 的输出相同。换句话说,我不想要first.child.grandchild
的值的副本,而是对象first.child.grandchild
的引用或符号链接。
void myFunc(P& first, P& last) {
// INSERT STATEMENT HERE TO DEFINE "g"
std::cout << first.child.grandchild[2] << endl; // line_1a
std::cout << g[2] << endl; // line_1b
g[4] = X; // where X is an in-scope object of matching type
std::cout << first.child.grandchild[4] << endl; // line_2a
std::cout << g[4] << endl; // line_2b
//...
}
答案 0 :(得分:1)
使用指针 - 然后您可以在函数中更改它。
WhateverGrandchildIs *ptr=&first.child.grandchild[2];
std::cout << *ptr << std::endl;
ptr=&first.child.grandchild[4];
std::cout << *ptr << std::endl;
答案 1 :(得分:1)
假设grandchild
的类型为T
,且大小为N
;然后下面是为数组创建引用的方法。
void myFunc(P& first, P& last) {
T (&g)[N] = first.child.grandchild;
...
}
我不喜欢这里的指针,虽然这也是一种可能的方式。因为,数组的静态大小有助于静态分析器进行范围检查。
如果您使用的是C ++ 11编译器,那么auto
是最好的方法(已由@SethCarnegie提及):
auto &g = first.child.grandchild;