- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
class SumClass
{
int A, B;
public:
void Set_A(int A) {this->A = A;}
void Set_B(int B) {this->B = B;}
int Sum() {return A+B;}
}
class MultiSumClass
{
SumClass Sum;
int count;
public:
void Set_A(int A) {Sum.Set_A(A);}
void Set_B(int B) {Sum.Set_B(B);}
void Set_Count(int count) {this->count = count;}
int GetSum() {return Sum->Sum()*count;}
}
void main()
{
MultiSumClass MSC;
MSC.Set_A(5); MSC.Set_B(10);
MSC.Set_Count(2);
cout << MSC.GetSum();
}
bormand 02.07.2012 14:40 # +1
http://ideone.com/MBMeo
Psionic 03.07.2012 09:19 # −8
roman-kashitsyn 03.07.2012 09:55 # +4
bormand 03.07.2012 10:16 # +3
roman-kashitsyn 03.07.2012 10:31 # 0
bormand 03.07.2012 11:19 # 0
roman-kashitsyn 03.07.2012 11:38 # +2
В этом плане IDE не помощник
Lure Of Chaos 03.07.2012 11:23 # +3
там точка входа public static void main(String[] args),
код завершения можно передать только через System.exit(code);
и в то же время завершение проги через System.exit() считается дурным тоном (не рекомендуется), т.к. безусловно убивает всю VM без завершения всяких там финализаторов и проч.
плюс еще security manager может это дело запретить.
trollface.jpg
bormand 03.07.2012 11:29 # 0
Выхода нет...
Lure Of Chaos 03.07.2012 12:09 # 0
bormand 03.07.2012 12:15 # 0
Lure Of Chaos 03.07.2012 12:17 # 0
bormand 03.07.2012 10:08 # +3
"It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char * argv[]) { /* ... */ }".
Еще вопросы есть?
Psionic 03.07.2012 18:35 # −7
bormand 03.07.2012 18:40 # +4
P.S. Ну и в g++ void main() тупо не компилится. Так что вариантов у меня особо нет.
bormand 03.07.2012 18:52 # +3
Чем меньше вы пользуетесь "фишками" (читай выебонами) текущей платформы - тем больше вероятность того, что этот код будет собираться другим компилятором, или тем же самым через несколько лет.
Чем меньше вы пользуетесь недокументированными возможностями (читай багофичами) - тем больше вероятность того, что ваш код будет работать после очередного обновления операционки или каких-либо библиотек.
3.14159265 03.07.2012 20:16 # +1
Лол. Так можно довыебываться до того что когда приспичит срочно портировать код - будет страшный процесс дрочева "шоб оно компилилось", вместо того чтобы не особо напрягаясь приучиться писать нормально.
bormand 03.07.2012 20:25 # +1
eth0 03.07.2012 19:03 # +1
Был бы в этом хоть какой-то сакральный смысл.
bormand 03.07.2012 19:10 # +1
Борьба с системой же!
UPD: Но к int надо еще и return
rat4 03.07.2012 20:47 # +1
В main можно опустить return - это эквивалентно return 0
bormand 03.07.2012 20:54 # 0
Да я в курсе... просто не понимаю, зачем они сделали этот дурацкий частный случай. Поэтому я всегда пишу return в main(). Если приведете веские аргументы в пользу его неписания - может быть и перестану ;)
rat4 03.07.2012 21:43 # 0
а ещё экономия места на диске
bormand 04.07.2012 05:28 # 0
Имхо, глупо делать исключения на ровном месте ради сомнительной экономии одной строчки на проект. Причем в С89 такой код вызывает UB, но тем не менее компилируется (с ворнингом), а во всех дальнейших с\с++ подразумевается return 0.
defecate-plusplus 04.07.2012 07:15 # 0
думаю, накопилось достаточно кода, написанного для какого то лояльного компилятора, позволяющего ничего не возвращать из main - вот и легализовали это на бумаге
к слову, в С99 есть аналогичный пункт про отсутствие return, а в С11 вообще намекают на то, что main может возвращать incompartible with int
зы в С++11 тоже есть намек на отличие вовращаемого типа от int - традиционно implementation defined
bormand 04.07.2012 08:51 # +2
Если гора не идет к Магомету...
Fai 05.07.2012 06:38 # 0
Преобразовали бы язык что-ли, дабы он леворекурсивным парсером нормально обрабатывался.
TarasB 03.07.2012 20:54 # 0
bormand 03.07.2012 20:55 # +2
A return statement in main has the effect of leaving the main function (destroying any objects with auto-
matic storage duration) and calling exit with the return value as the argument. If control reaches the end
of main without encountering a return statement, the effect is that of executing
return 0;
bormand 04.07.2012 09:04 # +8
1) Старые программы, которые вместо #include <errno.h> писали extern int errno... "Зачем инклудить какую-то херню ради одной переменной?", думали программисты, и получили хуем в лоб, когда в libc появилась поддержка тредов.
2) Куча софта, использующего memcpy вместо memmove потому что оно работает... Все это поломалось на очередном обновлении libc, в котором memcpy решили сделать более шустрым.
3) Тот же MySQL с его кастом инта в велосипедный бул размером в чар... Кого ебёт то, что memcmp возвращает int а не char? Да никого, потому, что до некоторых пор все сравнивалось побайтно и результат, по счастливой случайности, не вылезал за пределы чара.
Вот из-за таких как вы, забивающих на стандарты, и любящих пользоваться UB и недокументированными фишечками, и случаются все эти проблемы, которых могло бы и не быть. А фиксить эти проблемы приходится не вам, а авторам компиляторов, и библиотек, оставляя костыли и теряя возможность сделать более вменяемые или быстрые реализации.
Psionic 04.07.2012 10:14 # 0
bormand 04.07.2012 10:29 # +2
Конечно интересует. И, я согласен, что иногда нужно положить болт на стандарты, и сделать чтобы работало. Но не надо делать из раскладывания болтов смысл жизни, и писать хуйню (читай void main() в с++) тогда, когда все прекрасно работало бы и по стандарту.
Psionic 04.07.2012 11:47 # −1
bormand 04.07.2012 12:49 # 0
Да ради бога! В таких случаях и я с радостью прощу автора.
Но проблема в том, что опытный разработчик, который умеет нормально проектировать, как правило и не позволит себе, без веской на то причины, отклоняться от стандарта и документированных возможностей...
Fai 05.07.2012 06:51 # 0
roman-kashitsyn 04.07.2012 10:45 # +2
> знаеш
ведь не так уж сложно не нарушать стандарты русского, например.
3.14159265 05.07.2012 15:52 # +3
Q.E.D.
govnomonad 02.07.2012 14:46 # +3
ололо lazy evaluation
bormand 02.07.2012 14:56 # +3
sayidandrtfm 02.07.2012 15:42 # +5
Fai 02.07.2012 20:00 # +1
cout << MultiSumClass(1,2,3)();
Lure Of Chaos 02.07.2012 20:20 # +1
bormand 02.07.2012 20:23 # 0
Ну тогда уж сделать конструктор, с передачей A, B и оператор int().
http://ideone.com/auqwp
Fai 03.07.2012 02:50 # 0
Вот ленивое умножение я могу себе представить: если первый операнд 0, второй вычислять не нужно.
А ленивое сложение... Может чего-то не знаю, поясните пожалуйста.
bormand 03.07.2012 06:12 # +3
Т.е. сложение будет выполнено только тогда, когда понадобится его результат.
Fai 03.07.2012 20:08 # 0
zim 02.07.2012 21:33 # +5
>игрстрй
Em1ss1oN 03.07.2012 13:02 # +1
Fai 05.07.2012 15:23 # 0
ExceptionClass { ... };
printfFunction( ... );
ColorEnum { clBlack... };
xDouble = 0.1;
yString = "...";
И финал:
template <...> class vectorTemplateClass { };
template <...> void compareTemplateFunction( ... );
Fai 05.07.2012 15:31 # 0
compareTemplateFunctionResultBoolArment1 AnyArgument2Any
... кстати выше bool а не void как результат.