История изменений
Исправление Kroz, (текущая версия) :
Вообще-то, если функция принимает параметр по ссылке, то при вызове нельзя указывать значение (не переменную) в качестве параметра. Это недостаток такого метода. Например, вот такое вызовет ошибку компиляции:
void func2(int &a)
{
std::cout << "value: " << a << std::endl;
}
...
func2(2);
Логика проста: потенциально функция может менять такой параметр, и будет меняться соотв. паременная; а что должно произойти, если было передано значение (как в примере выше), а func2 сделает
a=10;
?Другое дело, если функция принимает параметр как const reference. Проверил - gcc не ругается. Но я бы всё равно поостерегя такое практиковать: не уверен что такое прописано в стандарте, а значит может быть компиляторо-зависимым. Плюс еще непонятно как оно будет вести в таком случае как у тебя.
Короче, мой тебе совет: если делаешь функцию, которая принимает параметр по ссылке, при вызове такой функции никогда не указывай значения (не-переменные) как параметры.
Исправление Kroz, :
Вообще-то, если функция принимает параметр по ссылке, то при вызове нельзя указывать значение (не переменную) в качестве параметра. Это недостаток такого метода. Например, вот такое вызовет ошибку компиляции:
void func2(int &a)
{
std::cout << "value: " << a << std::endl;
}
...
func2(2);
Логика проста: потенциально функция может менять такой параметр, и будет меняться соотв. паременная; а что должно произойти если было передано значение, а func2 сделает
a=10;
?Другое дело, если функция принимает параметр как const reference. Проверил - gcc не ругается. Но я бы всё равно поостерегя такое практиковать: не уверен что такое прописано в стандарте, а значит может быть компиляторо-зависимым. Плюс еще непонятно как оно будет вести в таком случае как у тебя.
Короче, мой тебе совет: если делаешь функцию, которая принимает параметр по ссылке, при вызове такой функции никогда не указывай значения (не-переменные) как параметры.
Исходная версия Kroz, :
Вообще-то, если функция принимает параметр по ссылке, то при вызове нельзя указывать значение (не переменную) в качестве параметра. Это недостаток такого метода. Например, вот такое вызовет ошибку компиляции:
void func2(const int &a)
{
std::cout << "value: " << a << std::endl;
}
...
func2(2);
Логика проста: потенциально функция может менять такой параметр, и будет меняться соотв. паременная; а что должно произойти если было передано значение, а func2 сделает
a=10;
?Другое дело, если функция принимает параметр как const reference. Проверил - gcc не ругается. Но я бы всё равно поостерегя такое практиковать: не уверен что такое прописано в стандарте, а значит может быть компиляторо-зависимым. Плюс еще непонятно как оно будет вести в таком случае как у тебя.
Короче, мой тебе совет: если делаешь функцию, которая принимает параметр по ссылке, при вызове такой функции никогда не указывай значения (не-переменные) как параметры.