类中方法的正确使用`=delete`
以下代码片段对于取消定义类的所有其他生成的方法和构造函数是否正确? struct Picture { // 'explicit': no accidental cast from string to Picture…
移动语义 std::move 如何使用它
#include template typename std::remove_reference::type&& move(T&& v) { return v; } void main() { int a; move(a); } 为什么这段代码不能编译? …
右值引用参数和模板函数
如果我定义一个接受右值引用参数的函数: template void fooT(T &&x) {} 我可以使用 GCC 4.5 使用 a、ar 或 arr 来调用它: int a, &ar = a, &&arr = …
为什么在 C++0x 右值引用的前向定义中使用标识?
在右值引用简介中,forward定义如下: template struct identity { typedef T type; }; template T &&forward(typename identity::type &&a) { return…
T&&; 是什么意思? (双&符号)在 C++11 中意味着什么?
我一直在研究 C++11 的一些新功能,我注意到的一个是声明变量时的双 & 符号,例如 T&&变量。 首先,这个野兽叫什么?我希望谷歌允许我们像这样搜索标…
什么是 multimap::emplace() 和 move()?
我正在查看有关 multimap 的 MSDN 文档,发现它有一个成员函数 multimap::emplace()。下面是该成员函数的示例。 int main( ) { using namespace std; …
C++11 - 区分右值指针
如何将变量区分为编译器构造的字符串? 例如,右值 "Hello, World" 的类型为 const char*。 const char* 本身并不意味着指针不能更改。 char* const …
如何达到“最佳”效果?带有右值的算术表达式中的运算符重载解析?
首先,我为这个过于冗长的问题表示歉意。我想不出任何其他方法来准确总结我的问题...现在讨论实际问题: 我目前正在试验 C++0x 右值引用...以下代码会…
是否有一个reference_wrapper<>对于右值引用?
我想知道如何完成以下操作 void f(string &&s) { std::string i(move(s)); /* other stuff */ } int main() { std::string s; bind(f, s)(); // Error…
std::string 可以重载“substr”吗?对于 rvalue *this 并窃取资源?
我突然想到,当 std::string 的 substr 操作可以从 *this 窃取分配的内存时,它对于右值来说会更有效。 N3225 的标准库包含以下 std::string 成员函数…
C++11 右值和带有 return 语句的移动语义
我试图理解 C++11 的右值引用和移动语义。 这些示例之间有什么区别,哪些示例不进行矢量复制? 第一个例子: std::vector return_vector(void) { std:…
通过 std::bind 传递右值
我想通过 std::bind 将右值传递给在 C++0x 中采用右值引用的函数。我不知道该怎么做。例如: #include #include template void foo(Type &&value) { T…
标准库容器在 GCC 中的右值上生成大量副本
我正在为 Linux 和 Linux 编写一个应用程序。 Windows,并注意到 GCC 构建产生了大量对复制构造函数的无用调用。 下面是产生此行为的示例代码: struc…
是否有必要从不同的类定义移动构造函数?
请考虑以下问题: struct X { Y y_; X(const Y & y) :y_(y) {} X(Y && y) :y_(std::move(y)) {} }; 是否有必要定义像第二个这样的构造函数才能充分利…