ひとつ目.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 - はじめ