c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
编译器使用模板版本来计算t = max(a,b)和max(t,c).支持此标准的任何引用都是受欢迎的. #include <iostream> template <typename T> inline T const& max (T const& a, T const& b) { std::cout << "template" << '\n'; return a < b ? b
精简版: 在现代C中使用非智能指针有什么可接受的理由吗? 长版: 我们有一个包含很多旧C代码的巨大产品,现在我们正试图将它重构为现代C时代.除了所有旧式代码之外,还有大量的指针传递(主要是使用SAL注释来提供一些安全感),我想知道是否应该将它们全部更改为智能指针,或者可能将其中的一些保留为智能指针. ? 试图转换其中的一些代码,我最终得到了一个代码,它可以简单地论证使用智能指针. 所以问题是:是否
我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦. $g++ --version g++ (GCC) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. The
假设我想编写一个接收指针的函数.但是我想允许调用者使用裸指针或智能指针 – 无论他们喜欢什么.这应该是好的,因为我的代码应该依赖于指针语义,而不是指针实际实现的方式.这是一种方法: template<typename MyPtr> void doSomething(MyPtr p) { //store pointer for later use this->var1 = p;
C InputIterator是Iterator概念中最受限制的类型之一.它只能保证支持解除引用,相等比较,预增量和后增量(以及后增量和取消引用) 由于InputIterator对象经常迭代任意流,因此您甚至无法确定在同一输入上迭代两次将产生相同的值. 但是,我很困惑,如果取消引用运算符operator *,每次取消引用时都保证返回相同的值,前提是你永远不会增加迭代器. 例如,假设std :: b
我有一个类具有unordered_map类型的字段.我在我的应用程序中创建了这个对象的单个实例,它包含在shared_ptr中.该对象非常耗费内存,我想在使用它后立即将其删除.但是,重置指针只会释放对象占用的一小部分内存.如何强制程序释放对象占用的所有内存? 以下模拟程序重现我的问题. for循环打印垃圾只是给我足够的时间来观察顶部使用的内存.在reset()之后调用析构函数.此外,紧接着,使用的
在我的任务:)尽可能多地使用STL我想知道是否可以使用std :: generate和std :: back_inserter组合,以便我可以执行与以下代码相同的操作: static const size_t nitems=1024*1024; std::string mrbig; for (size_t pos=0; pos<nitems; ++pos) mrbig.push_back(
一个可能有一个函数void setData(std :: string arg);并通过setData(std :: move(data))调用它;因此调用move构造函数,他会对void setData(std :: string&& arg)做同样的事情. (除非他被迫将数据移入其中).如果对简单情况应该使用move,那么编译器决定做什么呢? 所以我的问题是:一个人应该使用&&不仅是编译器,还
借用 Howard Hinnant’s example并修改它以使用copy-and-swap,这是op =线程安全的吗? struct A { A() = default; A(A const &x); // Assume implements correct locking and copying. A& operator=(A x) { std::lock_guard
参见英文答案 > C++ array initialization                                    4个 #include <iostream> using namespace std; int main() { int arr[10] = {}; for(auto element : arr) { cout<<ele
我想知道在将单个元素插入STL容器(如set,unordered_set)时是否始终使用emplace替换insert是否可行? 从签名中,emplace更简单,不涉及重载.是否有任何问题停止使用插入并始终使用emplace? 注意:有一些问题询问了emplace和insert / push_back等之间的区别(例如here,here和here)我理解其中的区别,在我看来,emplace在各方面
我看到很多人一起谈论安全性和std :: random_device. 例如,here幻灯片22. 根据cppreference,std :: random_device: std::random_device is a uniformly-distributed integer random number generator that produces non-deterministic ran
我想知道是否有任何方法来检查您分配到std :: function的函数指针是否为nullptr.我期待着!-operator这样做,但它似乎只在函数被赋值为nullptr_t类型时才起作用. typedef int (* initModuleProc)(int); initModuleProc pProc = nullptr; std::function<int (int)> m_pInit;
我很好奇以下情况是否安全. 我有以下类定义: class ActiveStatusEffect { public: StatusEffect* effect; mutable int ReminaingTurns; ActiveStatusEffect() : ReminaingTurns(0) { } //Other unimportant stu
我不明白为什么第三种情况没问题(即使lambda的参数类型与std :: function类型不同),而编译器抱怨第四种情况: function<int(int)> idInt = [](int i) {return i;}; //OK function<int(int&)> idInt = [](int &i) {return i;}; //OK function<int(int&)> idIn
C标准要求std :: partition在ForwardIterator和BidirectionalIterator之间具有不同数量的谓词应用程序.对于Forw​​ardIterator版本,谓词应用程序的数量应为< = N,其中N = std :: distance(first,last),但对于BidirectionalIterator版本,谓词应用程序的数量应为< = N / 2.显然,两
我在GCC中为C 11引入的新ABI遇到了问题.升级到GCC 5.3后,我的项目不再编译.我得到的错误消息很简单: undefined reference to `tokenize(std::__cxx11::basic_string' ...more characters 要么 undefined reference to `extract(std::string const&)' 所以,看起
在下面的代码中,类S的对象s用于使用直接初始化D d(s);来初始化类D的对象.转换函数S :: operator D()用于将对象转换为D类型的临时对象.然后, gcc和clang都忽略对移动构造函数D(&&)的显式调用,以移动它临时对象进入d.见 live example. #include <iostream> struct D; struct S{ operator D(); }; st
新的C(C 0x或C 11)有一种新的枚举,一种“枚举类”,其中的名称作用于枚举(以及其他内容). enum class E { VAL1, VAL2 }; void fun() { E e = E::VAL1; // Qualified name } 但是,我想知道,如果我可以在某个范围内有选择地使用不合格的名称.就像是: void fun() { using E::
我正在尝试编写一个c lambda函数,并且不喜欢使用auto作为类型.目前它看起来像: #include <iostream> int main() { // Sends the address of an integer to a function which prints out the contents; auto print_int = [](int* a) {std::co