Информация об изменениях

Сообщение Re[3]: [plain c] Параметр функции как const и не const при в от 21.04.2015 11:06

Изменено 21.04.2015 11:16 uzhas

Здравствуйте, Alexander G, Вы писали:

AG>Ну так это в данном случае корректный alias


согласен, на эти грабли тут не наступим
хотел обратить внимание на такой вариант: у функции 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
Re[3]: [plain c] Параметр функции как const и не const при в
Здравствуйте, 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