Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。


3
什么是“ * this的右值参考”?
在clang的C ++ 11状态页面中遇到了一个名为“ * this的右值引用”的提案。 我已经阅读了很多有关右值引用并理解它们的知识,但我认为我对此并不了解。使用这些条款,我在网络上也找不到太多资源。 该页面上有一份建议书链接:N2439(将移动语义扩展到* this),但我从那里也没有太多示例。 这个功能是关于什么的?


1
启用C ++ 11时std :: vector性能回归
当启用C ++ 11时,我在一个小的C ++代码段中发现了有趣的性能下降: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } 使用g ++(GCC)4.8.2 20131219(预发行版)和C ++ 03,我得到: milian:/tmp$ g++ -O3 main.cpp && …
235 c++  performance  gcc  c++11  vector 

4
为什么我会使用push_back而不是emplace_back?
C ++ 11向量具有新功能emplace_back。与push_back依赖于编译器优化来避免复制的,它不同,它emplace_back使用完美的转发将参数直接发送到构造函数以就地创建对象。在我看来,emplace_back一切push_back都能做,但是有时候它会做得更好(但永远不会更糟)。 我必须使用什么原因push_back?
231 c++  c++11  std 



4
何时使用哪种指针?
好的,所以我上一次写C ++为生时,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时。我从来没有真正研究过提供的其他智能指针类型。我知道C ++ 11现在提供了某些类型的boost,但不是全部。 那么,有人可以通过简单的算法来确定何时使用哪个智能指针吗?最好包括有关哑指针(原始指针,如T*)和其他Boost智能指针的建议。(喜欢的东西这将是巨大的)。

10
C ++ 11中引入了哪些重大更改?
我知道C ++ 11中的至少一项更改会导致一些旧代码停止编译:explicit operator bool()在标准库中引入,替换了的旧实例operator void*()。当然,将要中断的代码可能最初应该是无效的代码,但是仍然是一个重大更改:曾经有效的程序不再有效。 还有其他重大变化吗?
227 c++  c++11 



14
C ++ 11 auto关键字多少钱?
我一直在使用autoC ++ 11标准中的new 关键字来处理复杂的模板化类型,这是我认为它的设计目的。但是我还将它用于诸如以下的事情: auto foo = std::make_shared<Foo>(); 更怀疑的是: auto foo = bla(); // where bla() return a shared_ptr<Foo> 关于这个主题,我还没有看到太多讨论。auto由于类型通常是文档和健全性检查的一种形式,因此似乎可以过度使用。您在哪里划界线auto?此新功能的建议用例是什么? 需要澄清的是:我不是在征求哲学意见;我要求标准委员会提供此关键字的预期用途,并可能对在实践中如何实现预期用途提出意见。 旁注:此问题移至SE.Programmers,然后返回到堆栈溢出。关于这个的讨论可以在这个元问题中找到。

2
为什么不能将unique_ptr推回向量中?
该程序有什么问题? #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } 错误: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* …

6
make_unique和完美的转发
为什么std::make_unique标准C ++ 11库中没有功能模板?我发现 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 有点冗长。以下内容会更好吗? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); 这new很好地隐藏了,只提及了一次类型。 无论如何,这是我尝试实现的make_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } 我花了很std::forward长时间才可以编译这些东西,但是我不确定它是否正确。是吗?到底是什么std::forward<Args>(args)...意思?编译器如何处理?

4
C ++ 11基于范围的循环:通过值或引用const获取项目
读取基于范围环的一些例子他们建议两种主要方式1,2,3,4 std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } 要么 for (auto x : vec) { // Value of x is copied from an item of vec // We can …
215 c++  c++11 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.