LINUX.ORG.RU

История изменений

Исправление 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 не ругается. Но я бы всё равно поостерегя такое практиковать: не уверен что такое прописано в стандарте, а значит может быть компиляторо-зависимым. Плюс еще непонятно как оно будет вести в таком случае как у тебя.

Короче, мой тебе совет: если делаешь функцию, которая принимает параметр по ссылке, при вызове такой функции никогда не указывай значения (не-переменные) как параметры.