MemRef
是一个包含指向内存的指针和长度的小对象。将关键部分中的字符串复制最小化是优化项目的核心。令牌是一个deque<MemRef>
.
当我在输入缓冲区中识别标记时,我想构造MemRef
s 并将它们添加到标记双端队列中。第一次尝试是:
MemRef foo(token_begin, token_len);
tokens.push_back( foo );
因为我在这里看到了 dtor 调用,所以它告诉我foo正在被创建、复制,然后被销毁。下一次尝试是:
tokens.push_back( MemRef(token_begin, token_len) );
但我看到了同样的行为。我的猜测是正在创建一个临时对象,将其复制到双端队列中,然后将其销毁,这也许就是“移动语义”主题的来源(我对此非常不清楚)。
有没有办法,实际上,MemRef
直接构建到令牌双端队列,而不创建和销毁临时?
(我使用 Apple LLVM 5.0 版(clang-500.2.79)和 --std=c++11)