ひとつ目.switch の後に { } がない(switch の意味が無いが…).return でカンマ区切りの式.throw がカンマ区切りをともなってネスト.
#include <iostream> int main(int argc, char *argv[]) { try { switch(argc) case 1 : return std::cout << "no argument!" << std::endl, 0, throw (1,throw 9,2), 1; } catch (int k) { std::cout << "cought exception: " << k << std::endl; } return 0; }
どうやらこのコードでは 9 が投げられるらしい.
二つ目.Pointer to Member Function: .* and ->*
#include <iostream> struct Base { virtual void f() { std::cout << "Base! " << std::endl; } }; struct DerivedA : public Base { int k; DerivedA(int kk) : k(kk) {}; void f() { // オーバーライド std::cout << "DerivedA with k = " << k << std::endl; } }; struct DerivedB : public Base { }; int main(int argc, char *argv[]) { DerivedA *pobjA, objA(5); DerivedA objA2(3); DerivedB objB; typedef void (Base::*f_type)(); f_type f_base = &Base::f; pobjA = &objA; (objA2.*f_base)(); (pobjA->*f_base)(); (objB.*f_base)(); }
なんに使えるのかよくわからないが,とりあえずちゃんとオーバライドした関数も呼ばれる.
- Newer: AWK - はじめ