• C++的几个晦涩特性


    Obscure C++ Features - Made by Evan列举了几个C++的晦涩特性,挺有意思的,下面简单列几个:

    []是啥意思

    ptr[3]只是 *(ptr + 3) 的简写,所以也就是 *(3 + ptr),所以它和 3[ptr] 是一样的。

    运算符重载

    运算符重载可以做很多奇怪的事情,比如可以通过运算符重载实现python style的print。如下:

    namespace __hidden__ {
        struct print {
            bool space;
            print() : space(false) {}
            ~print() { std::cout << std::endl; }
    
            template <typename T>
            print &operator , (const T &t) {
                if (space) std::cout << ' ';
                else space = true;
                std::cout << t;
                return *this;
            }
        };
    }
    
    #define print __hidden__::print(),
    
    int main() {
        
         int a = 1, b = 2;
    
         print "this is a test";
         print "the sum of", a, "and", b, "is", a + b;
    
        return 0;
    }

    函数的try

    可以在函数名称后面加上try,对应整个函数体。例如下面的代码。

    int f() { throw 0; }
    
    // Here there is no way to catch the error thrown by f()
    struct A {
      int a;
      A::A() : a(f()) {}
    };
    
    // The value thrown from f() can be caught if a try-catch block is used as
    // the function body and the initializer list is moved after the try keyword
    struct B {
      int b;
      B::B() try : b(f()) {
      } catch(int e) {
      }
      int B::C() try{
          throw 2;
          return 1;
      } catch(int e) {
          cout<<"exception "<<e<<endl;
      }
    };
  • 相关阅读:
    c# 方法重载
    c# propertyGrid下拉选项
    c# 枚举类型
    c# socket编程
    读书笔记之ado.net entity framework
    c# delegate的invoke和bejinInvoke的区别
    C# 读书笔记之类与结构体
    c#笔记之启动新线程
    c# listview的使用
    visual studio2013 改变匹配括号的颜色
  • 原文地址:https://www.cnblogs.com/fresky/p/3063235.html
Copyright © 2020-2023  润新知