Nas funções C ++, como os objetos Rcpp são transmitidos para outras funções (por referência ou por cópia)?

Acabei de escrever uma nova versão do pacote ABCoptim usando o Rcpp. Com cerca de 30x de aceleração, estou muito feliz com o desempenho da nova versão (versão anterior), mas ainda tenho algumas preocupações sobre se tenho espaço para melhorar o desempenho sem modificar muito o código.

Dentro da função principal do ABCoptim (escrita em C ++), estou passando um objeto Rcpp :: List contendo "posições de abelhas" (NumericMatrix) e alguns NumericVectors com informações importantes para o próprio algoritmo. Minha pergunta é: quando estou passando um objeto Rcpp :: List por outras funções, por exemplo

#include <Rcpp.h>

using namespace Rcpp;

List ABCinit([some input]){[some code here]};
void ABCfun2(List x){[some code here]};
void ABCfun3(List x){[some code here]};

List ABCmain([some input])
{
  List x = ABCinit([some input]);
  while ([some statement])
  {
    ABCfun2(x);
    ABCfun3(x);
  }
  ...

  return List::create(x["results"]);
}

O que o Rcpp faz dentro do loop while? O objeto x é passado por referência ou por cópia profunda para as funçõesABCfun2 eABCfun3? Eu já vi o uso de 'const List & x', que me diz que posso passar objetos Rcpp usando ponteiros, mas o importante é que eu preciso que essa lista seja variável (e não constante). Existe alguma maneira de melhorar isso? Receio que a cópia iterativa desta x List possa estar atrasando meu código.

PS: Eu ainda sou novo em C ++, além disso, estou usando o Rcpp para aprender C ++.

questionAnswers(3)

yourAnswerToTheQuestion