Сигнатура int& foo()=7
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 4
- Зарегистрирован: 31 мар 2014, 19:01
Друзья,
это чисто теоретический вопрос. Подскажите где может быть использована такая функция. Какой в этом практический смысл?
int& foo()=7;
Детали: тип не принципиален, целый взят просто в качестве примера.
Большое спасибо заранее.
это чисто теоретический вопрос. Подскажите где может быть использована такая функция. Какой в этом практический смысл?
int& foo()=7;
Детали: тип не принципиален, целый взят просто в качестве примера.
Большое спасибо заранее.
Вероятнее всего в каких либо расчетах какое то значение используется как константа, но возможно и использование функции. С точки зрения рефакторинга это православно, т.к. не приходится переделывать весь расчет, а достаточно изменить саму функцию. Наиболее вероятно, что эта же функция используется в разных участках кода и это тем более, с избытком ее оправдывает.
It's a long way to the top if you wanna rock'n'roll
А по-русски?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
...........................||=== 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)) ===|
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Я не знаю, откуда взят этот пример, но синтаксис такой функции неверен и это никогда не скомпилируется.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Именно в таком варианте данное выражение синтаксически ошибочно.
Однако, можно рассмотреть несколько вариантов с незначительными исправлениями, при которых данный код сможет работать.
Код 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;
}
Однако, можно рассмотреть несколько вариантов с незначительными исправлениями, при которых данный код сможет работать.
Код 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;
}
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Мне пришёл в голову ещё один вариант с небольшим исправлением. Если 7 заменить на ноль и разместить это объявление внутри класса, то мы получим объявление чисто виртуального метода:
Если будет интересно, что такое чисто виртуальный метод, дай знать, и я расскажу подробнее.
Код: Выделить всё
class CSomeClass
{
public:
virtual int& foo() = 0;
};
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 4
- Зарегистрирован: 31 мар 2014, 19:01
WinMain писал(а):Именно в таком варианте данное выражение синтаксически ошибочно.
Однако, можно рассмотреть несколько вариантов с незначительными исправлениями, при которых данный код сможет работать. ...............
Большое спасибо за вариант, думаю такое применение - один из наиболее приемлемых вариантов реализации.