Luckyscript's Blog
  • 关于优化博客

    迫于贫穷,博客挂在境外,国内的访问速度本来就比较慢,加上之前自己开发这个博客的时候都是在下班后,为了快速看到效果很多地方都没有考虑清楚,导致无论是前台还是后台都有很多问题,这也是我一直羞于开源的原因。但是底子不好不代表我们后天不努力,最近,我还是决定要将博客的体验做的更好点。首先放出目前的优化效果: 优化结果

    合并css

    之前写博客为了本地开发方便,直接用postcss自动编译,每个模块有自己的css,然后在相应的模块中引入,但是这样造成了一个页面请求多个css的情况。所以合并了css的编译结果。 【优点】:减

  • 3D in web

    OpenGL介绍

    • OpenGL 是一种跨平台的图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
    • 目前OpenGL已经停止更新了,同一公司下的Vulkan引擎在将来可能会大放异彩。但是这并不妨碍我们学习WebGL与OpenGL。

    WebGL简要介绍

    • WebGL是一种3D绘图协议。
    • 在Linux/Unix和MacOS上,WebGL是基于OpenGL的,而在Windows系统上,则是基于微软的DirectX。
    • 这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,WebGL可以为HTML5 Canvas
  • virtual method table in C++

    最近闲逛v2ex的时候,发现了这么一个帖子:求助 C++大神看一个问题

    点进去一看代码,一脸懵逼,这是啥。。。

    class B {
    public:
        virtual void foo() {}
    };
    class D: public B {
    public:
        D() : mA(0) {}
        virtual void foo() {
            cout<<"D::foo::mA "<<mA<<endl;
        }
        int mA;
    };
    int main() {
        D d1;
        D* pD = &d1;
        cout<<pD<<endl;
        typedef void (*PFun)();
        PFun fun =  (PFun)((long *)*((long *)*(long*)(pD))); //???
        fun();
        cout<<"D::pD::mA: "<<pD->mA<<endl;
    }
  • C++ keyword extern

    extern关键字在C++中通常有三个作用

    存储类指定符

    extern作为存储类指定符的时候,被声明的对象具有静态存储期。 所谓静态存储期就是和static以及全域变量一样,在程序的运行周期都存在。

    // extern.h
    extern int e;
    // extern.cc
    int e = 0;
    //main.cc
    #include "extern.h"
    void fun()
    {
        e++;
        cout << e << endl;
    }
    int main()
    {
        fun();
        fun();
    }

    运行这段代码:

    $ g++ extern.cc main.cc
    $ ./a.out
    1
    2
  • C++ rvalue

    左值和右值

    int a = 3;
    // a is lvalue, 3 is rvalue

    学C的时候,对左值的概念是既能出现在表达式等号左边,又能出现在右边的变量;右值是只能出现在等号右边的量。 但是C++中,这两个的定义更加晦涩一点。《C++ primer》中这样定义这两个的差别

    当一个对象被用作右值得时候,用的是对象的值;当对象被用作左值得时候,用的是对象的身份。

    这个定义还是略显抽象,但是我们可以看出,我们往往关注表达式中的左值所代表的内存地址,对于右值,我们更关注这个值是多少。 同样,C++中,左值可以当做右值对象用,但是右值不能当成左值用。当一个左