c ++在函数内部创建引用变量

时间:2012-08-22 03:19:08

标签: c++ reference

假设我有以下功能:

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
    //...
}    

2 个答案:

答案 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;