- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
#include <iostream>
using std::cout;
using std::endl;
auto power(double x, int n)-> double*;
int main()
{
void * c = power(5,2);
std::cout << *(double*)c << std::endl;
return 0;
}
auto power(double x, int n)-> double*
{
double* result(new double(1.0));
for(int i = 1; i <= n; i++)
*result *= x;
return result;
}
wvxvw 21.08.2013 21:52 # +7
tirinox 22.08.2013 09:47 # +1
anonimb84a2f6fd141 22.08.2013 11:07 # 0
kegdan 22.08.2013 11:24 # +2
Сделаю пару предположений
1. Auto
Auto - аналог шарповского Var - никогда не видел в контексте объявления функций - ну да я с плюсами почти не работал, может все норм.
2. void * c = power(5,2);
Таки почему ссылка на void, а потом конвертация в double?
govnomonad 22.08.2013 12:31 # 0
Таки используется для объявления возвращаемого типа. В основном в шаблонных функциях если возвращаемый тип зависит от типов параметров
bormand 22.08.2013 15:47 # +2
1. Какого хрена вообще double*, а не просто double.
2. Функция возвращает double*, зачем его туда-сюда кастовать через void * - непонятно.
3. Тип результата не зависит от типа аргументов, declspec не юзается - авто не нужно.
4. Утечка памяти, выделенной в строке 19.
5. Неэффективный алгоритм возведения в степень, имеющий сложность О(n).
6. Нет отступа в строке 21.
Достаточно? :)
kegdan 22.08.2013 16:15 # 0
А как выглядит эффективный?
что то такое?
Это так, навскидку
kegdan 22.08.2013 16:18 # 0
bormand 22.08.2013 16:23 # +1
Да почему бред, почти попал же ;) > Блин, пишу бред, а удалить нельзя)
kegdan 22.08.2013 16:35 # 0
bormand 22.08.2013 19:28 # 0
kegdan 22.08.2013 19:39 # 0
фикс
int InPow(int x, int pow)
{
return (pow == 0) ? 1 : InPow(x * x, pow >> 1) * ((pow & 1) == 0 ? 1 : x);
}
bormand 22.08.2013 21:15 # 0
tirinox 22.08.2013 19:01 # +3
Оно даже на лабу не тянет.