Здравствуйте, Alexander G, Вы писали:
AG>Ну так это в данном случае корректный alias
согласен, на эти грабли тут не наступим
имелся в виду aliasing в широком смысле :
http://en.wikipedia.org/wiki/Aliasing_(computing)
хотел обратить внимание на такой вариант: у функции f могут быть неявные предположения как соотносятся входные указатели. то есть могут ли они указывать на одну память или обязаны не иметь пересекающихся участков
const/non const здесь неважен
я сталкивался с такой ситуацией
есть функция double f(double& a, double& b)
если ее вызвать, как
double a = 0;
double b = 0;
double x = f(a, b); <-- здесь корректное x
а при вызове
double a = 0;
double x = f(a, a); <-- здесь некорректное x
связано это было, по видимому, с тем, что входящие аргументы использовались для манипуляций (то есть использовались, как рабочие переменные) внутри функции
пример:
double Return1And2(double& a, double& b)
{
a = 1.0;
b = 2.0;
return a;
}
эта функция возвращает 1, если входные параметры лежат в разных областях памяти. иначе возвращает 2.0