- 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
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
#include <iostream>
using namespace std;
auto fw(int i)->bool
{
return cout<<"Привет станция мир"<<i<<"!"<<endl, true;
}
auto ff()->bool
{
return cout<<"Это должно быть последние выполненное подвыражение."<<endl, false;
}
auto ft()->bool
{
return cout<<"Хьюстон, у нас КРЕСТОПРОБЛЕМЫ. Нарушен порядок вычисления и ленивость логических операторов. Мы падаем!!!!1111"<<endl, true;
}
struct TBabylonBug
{
bool a=true;
TBabylonBug(){}
TBabylonBug(bool a):a(a){}
const TBabylonBug operator&&(const bool ophui) const
{
return a&&ophui;
}
const TBabylonBug operator&&(const TBabylonBug& ophui) const
{
return a&&ophui.a;
}
};
int main() {
cout<<"кo"<<endl;
true&&fw(1)&&fw(2)&&ff()&&ft();
cout<<"кo ко"<<endl;
cout<<"TBabylonBug().a = "<<boolalpha<<TBabylonBug().a<<endl;
TBabylonBug()&&fw(1)&&fw(2)&&ff()&&ft();
cout<<"кo ко ко"<<endl;
return 0;
}
vse_govno 17.10.2012 19:56 # +3
LispGovno 17.10.2012 20:24 # 0
LispGovno 17.10.2012 20:32 # 0
Вместо TClass*** может быть какой-нибудь умный указатель на умный указатель и тд или boost::optional или ещё какая-нибудь обертка.
Понятно, что после перегрузки операторов лень и порядок вычисления внезапно сломается. Например ***a.method1() вызовется первым.
myaut 18.10.2012 20:50 # +2
bormand 17.10.2012 20:09 # +4
P.S. Лень открывать стандарт, сделайте это за меня, будьте добры.
LispGovno 17.10.2012 20:16 # +2
bormand 17.10.2012 20:47 # +1
> Вместо TClass*** может быть какой-нибудь умный указатель на умный указатель и тд или boost::optional или ещё какая-нибудь обертка.
Зачем в этой обертке перекрыли &&? Перегрузки каста в бул вполне хватило бы, и код бы работал без проблем.
Abbath 17.10.2012 22:01 # +5
иначе получился бы D.
LispGovno 17.10.2012 22:07 # −1
Abbath 18.10.2012 01:57 # +1
http://dlang.org/lazy-evaluation.html
LispGovno 18.10.2012 03:40 # −1
defecate-plusplus 17.10.2012 20:25 # +6
— Мудак ты, Хабибулин, но сейчас ты Сокол!
guest 20.10.2012 17:18 # −3
guest 20.10.2012 17:27 # −3
>ophui