LINUX.ORG.RU

[C, C++, GCC] Передача параметров по ссылке или по значению


0

0

Пусть

int F(const SomeLargeType x)
{
    int n;
    // ...
    return n;
}

SomeLargeType a;
SomeLargeType b;

F(a);
F(a+b);

Поймёт ли компилятор, что в первом случае лучше передать параметр по ссылке, а во втором только по значению?

☆☆

при полной оптимизации - вполне вероятно, но как по мне лучше таки руками прописать:

int F(const SomeLargeType& x)
{
int n;
// ...
return n;
}

SomeLargeType a;
SomeLargeType b;
SomeLargeType c = a + b;

F(a);
F(c);

lester ★★★★
()

const SomeLargeType x это оксюморон Используй const SomeLargeType & x в любом случае. Для a+b тоже все корректно будет.

Reset ★★★★★
()
Ответ на: комментарий от ip1981

> Странно, вроде был случай, что компилятор ругался

msvc выдал варнинг, что это нестандартное расширение и что лучше так не делать - но таки скомпилил

lester ★★★★
()

неопытные плюсоиды -- такие плюсоиды... 

Сделай так:

int F(const SomeLargeType& x)

И радуйся жизни и лету! gcc это схавает и нормальное поймет (именно при обьявлении константной рефы), -- во втором случае в функцию будет передаватся const ref на временный обьект -- результат операции сложения a+b, после возврата из функции, будет удален и временный обьект. 

vnovouhov
()
Ответ на: комментарий от vnovouhov

Вот так. Пришел и расставил все на места.

mannaz
()
Ответ на: комментарий от vnovouhov

вообще-то это по стандарту, поэтому должен схавать любой нормальный компайлер, а не только gcc

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.