User-defined conversion and Copy elision

问题的开始

最初的讨论和思考

关于隐式转换(implicit conversion)

关于复制消除(copy elision)

问题的开始

问题的开始是同事聊到了我们笔试题的一个问题,是说下面这个代码其实在编译的时候是有问题的。

struct UserInfo {

UserInfo(const std::string& name) : name_(name) {}

private:

std::string name_;

};

int main() {

UserInfo u = "name";

}

最初的讨论和思考

显然在最开始的......

VIM and Latex

起源

起源是在群里看到了有人分享的关于一个人用 vim 写 latex 的文章,但是它的做法是用了一个 vimtex 的独立插件。

我是个 language server 的狂热使用者,所以我就在找一个用 language server 的处理方案。回忆起来另一次在另一个群里看到的,一个叫做 texlab 的项目,就在 vim 里搞个配合。

vim 里的插件选择

vim 里的 language client 的实现用好几种:

vim-lsp

coc.nvim

LanguageClient-neovim

用来用去还是 coc.nvim 在这里面不论是流畅度还是 fe......

Compare Between CRTP and Virtual

我们平时都会使用虚函数来实现 C++ 里的运行时的多态,但是虚函数会带来很多性能上面的问题:

虚函数的调用需要额外的寻址

虚函数不能被 inline,当使用比较小的虚函数的时候会带来很严重的性能负担

需要在每个对象中维护一个额外的虚函数表

但是在有些情况下,我们就可以用一些静态的类型分发策略来带来一些性能上面的好处。

一个传统的例子struct VirtualInterface {

virtual void Skip(uint32_t steps) = 0;

};

struct VirtualImpl : public VirtualInterface {

uint3......