Страница 1 из 1
Сигнатура int& foo()=7
Добавлено: 31 мар 2014, 23:32
Andriy_abc
Друзья,
это чисто теоретический вопрос. Подскажите где может быть использована такая функция. Какой в этом практический смысл?
int& foo()=7;
Детали: тип не принципиален, целый взят просто в качестве примера.
Большое спасибо заранее.
Re: сигнатура int& foo()=7
Добавлено: 02 апр 2014, 16:27
somewhere
Вероятнее всего в каких либо расчетах какое то значение используется как константа, но возможно и использование функции. С точки зрения рефакторинга это православно, т.к. не приходится переделывать весь расчет, а достаточно изменить саму функцию. Наиболее вероятно, что эта же функция используется в разных участках кода и это тем более, с избытком ее оправдывает.
Re: сигнатура int& foo()=7
Добавлено: 03 апр 2014, 14:35
Сионист
А по-русски?
Re: сигнатура int& foo()=7
Добавлено: 03 апр 2014, 14:36
Сионист
||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
C:\Projects\test\test.cpp|3|error: invalid pure specifier (only '= 0' is allowed) before ';' token|
C:\Projects\test\test.cpp|3|error: function 'int& foo()' is initialized like a variable|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
...........................
Re: сигнатура int& foo()=7
Добавлено: 03 апр 2014, 19:11
Romeo
Я не знаю, откуда взят этот пример, но синтаксис такой функции неверен и это никогда не скомпилируется.
Re: сигнатура int& foo()=7
Добавлено: 09 апр 2014, 19:06
Andriy_abc
Большое спасибо
Re: сигнатура int& foo()=7
Добавлено: 09 апр 2014, 21:13
WinMain
Именно в таком варианте данное выражение синтаксически ошибочно.
Однако, можно рассмотреть несколько вариантов с незначительными исправлениями, при которых данный код сможет работать.
Код cpp:
#include "stdafx.h"
int& foo()
{
static int var = 0;
return var;
}
int _tmain(int argc, _TCHAR* argv[])
{
int& a = foo() = 7; // добавить переменную
_tprintf(_T("%d\n"), a);
foo() = 10; // избавиться от типа
_tprintf(_T("%d\n"), foo());
return 0;
}
Re: сигнатура int& foo()=7
Добавлено: 09 апр 2014, 21:53
Romeo
Мне пришёл в голову ещё один вариант с небольшим исправлением. Если 7 заменить на ноль и разместить это объявление внутри класса, то мы получим объявление чисто виртуального метода:
Код: Выделить всё
class CSomeClass
{
public:
virtual int& foo() = 0;
};
Если будет интересно, что такое чисто виртуальный метод, дай знать, и я расскажу подробнее.
Re: сигнатура int& foo()=7
Добавлено: 22 апр 2014, 11:40
Andriy_abc
WinMain писал(а):Именно в таком варианте данное выражение синтаксически ошибочно.
Однако, можно рассмотреть несколько вариантов с незначительными исправлениями, при которых данный код сможет работать. ...............
Большое спасибо за вариант, думаю такое применение - один из наиболее приемлемых вариантов реализации.