一些不常用的C++特性

案例1:

代码:
namespace N {    int i = 4;

    extern int j;

}

int i = 2;

int N::j = i;  // j 的值应该是多少?


 
 

案例2:

代码:

typedef int f;
namespace N {
    struct A {
        friend int f(A&) { return 1; }
        operator int()   { return 2; }
        void g(A a) {
            int i = f(a); // i 应该等于多少呢?
        }
    };
}


案例3:

代码:
namespace M {
    struct S {};
    void f(S){};    // #1
}
namespace N {
    void f(M::S){}; // #2
    void g() {
        M::S s;
        M::f(s);   // 调用#1
        N::f(s);   // 调用#2
        // f(s);      // 会调用#2吗?#1和#2居然都匹配,编译报错!
        (f)(s);     // 调用#2,    }
}



案例4:

代码: 

namespace X {
    class B;
    namespace Y {
        struct A {};
        void foo(int (B::*)()) {}
    }
    struct B : Y::A {};
}
namespace N {
    void g() {
        int (X::B::*pd)() = 0;
        foo(pd); // 不用名字空间修饰(X::Y::foo(pds))居然也可以
    }
} 



案例5:

代码:
void foo() try {} catch(...) {}
struct X {
    int data;
    X() try {} catch(...) {}
    X(int x) try : data(x) {} catch(...) {} // 你见过这样的函数吗?
}; 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值