c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
我有以下枚举类: enum class EnumClass : int { A = 0, B }; 现在我想用枚举类型下标到数组: MyObject arr[2]; . . . MyObject a = arr[EnumClass::A] MyObject b = arr[EnumClass::B] 不幸的是我收到以下错误消息: array subscript is not an inte
我正在使用C 11 system_error错误代码库为我正在制作的库创建自定义错误类.我以前用boost :: error_code做了这个,但我不能很好的使用std :: error_code.我使用GCC 4.6. 基本上,我已经布置了所有的样板代码来创建一个错误类,一个error_category以及STD命名空间中的转换例程,将我的自定义枚举转换成std :: error_code对象:
根据C11标准[c.math],< cmath>标题与标准C库标题< math.h&gt ;.相同. (当然,有几个区别,—命名空间,重载等—但这些可以忽略) 根据C99标准附件F,“定义__STDC_IEC_559__的实施应符合附件F中的规定. 防爆.如果两个参数都为零,则atan2可能会导致域错误,但是如果定义了__STDC_IEC_559__则不能使用. 在C99中,许多行为也取决于__S
如果我想抓住多个锁而不会遇到死锁的危险,我可以使用std :: lock函数: int data1, data2; std::mutex m1, m2; std::unique_lock<std::mutex> lock1(m1, std::defer_lock); std::unique_lock<std::mutex> lock2(m2, std::defer_lock); std::loc
C 11 [atomics.types.generic] p7: There shall be named types corresponding to the integral specializations of atomic, as specified in Table 145, and a named type atomic_bool corresponding to the specif
如何检查两个参数包是否相同,忽略其内部顺序? 到目前为止,我只有框架(使用std :: tuple),但没有功能. #include <tuple> #include <type_traits> template <typename, typename> struct type_set_eq : std::false_type { }; template <typename ... Types
我有以下代码的两个问题:1)面孔的元素会连续吗? 2)std :: vector复制或移动Face f插入吗? #include <vector> int main() { struct Face {}; std::vector<Face> faces; for (int i=0; i<10; ++i) { Face f;
给定输入序列,标准算法std :: count和std :: accumulate计算特定值(或std :: count_if的谓词匹配)的发生次数和给定关联操作的累加(sum,product,Boolean或/和,最小/最大,字符串连接等). 如果想知道输入序列是否包含精确/至少/最多n个出现/匹配,或者累加到一个/至少/至多n个的总和,该怎么办?强力的方法是将std :: count或std
说我有一个管理内存的类,因此需要用户定义的特殊成员函数(想象向量或类似的). 考虑move-assignment操作符的以下实现: Class& operator=(Class&& rhs) { this->~Class(); // call destructor new (this) Class(std::move(rhs)); // ca
我正在编写一个C 1函数,该函数需要一个可调用作为参数,并且我希望将该参数默认为无操作函数.这是我迄今为止最好的尝试: const std::function<void()> noop= [](){}; void f( int x, int y, std::function<void()> fn= noop ) { /* ... */ } 我想知道标准库是否为我提供了一个“noop”std函数,还
在C 11中,方法可以重载,表示方法被调用的对象的表达式是否为左值或右值.如果我从一个通过rvalue调用的方法返回*,我需要明确地从*这个或者不是? Foo Foo::method() && { return std::move(*this); // Is this move required or not? } 不幸的是,我不能简单地测试这个在我的编译器,因为g不支持这个功能:(
2013 Keynote: Chandler Carruth: Optimizing the Emergent Structures of C++ > 42:45 您不需要输出参数,我们在C中有值语义. …任何时候你看到有人争辩说,我不会因价值而返回,因为复制将花费太多,那么在优化器上工作的人说错了.好吧?我从来没有看到一段代码,那个论点是正确的. …人们并没有意识到价值语义对于优化器有多重要,因
我试图以某种方式禁用/标记为不赞成使用hideous std :: string :: operator =(char)重载(在我的经验中,只有当错误地将一个整数分配给一个字符串时,才会使用它,并导致微妙而难以追踪的错误). 我试过: >一个明确的专业化与静态断言 #include <string> #include <type_traits> template<> std::basic_str
通过查看C 11的新功能,委托构造函数似乎在我的情况下特别有用. 不幸的是,我需要使用Visual Studio.我正在进行的项目有几个月的截止日期,使用实验/破坏的编译器并不关心我.是否有可以让我进行构造函数委派的Visual C版本? 见http://www.stroustrup.com/C++11FAQ.html#inheriting 是的,有一个beta版本的编译器支持委托构造函数 – V
我是C的新手,我正在尝试创建一个自定义异常,它在其ctor中接收一条消息. 我现在拥有的是: class LevelLoadException : public std::exception { public: LevelLoadException(std::string msg) : m_message(msg) { } const char * what () const th
我知道,从C 03标准来看,功能范围静态初始化不能保证线程安全: void moo() { static std::string cat("argent"); // not thread safe ... } 使用C 0x标准终于提供标准线程支持,是要求线程安全的函数范围静态初始化吗? 似乎初始化将是线程安全的,因为在进入函数时对象被动态初始化的情况下,它保证在关键部分执行: §
以下代码不会在GCC 4.7.2或Clang 3.2中编译: #include <vector> #include <functional> int main() { std::vector<std::function<void()>> a; std::vector<std::function<void()>> b{a}; } 问题是,编译器将尝试使用initializer_list
这个问题可能有点粗略,因为我没有在家里可以使用代码,但是我知道这个东西,否则会在整个周末的时候出现错误. 当我尝试更新一些代码到C 11时,我开始用std :: unordered_map替换一些std :: map.代码只使用std :: map :: find()访问地图中的一个特定元素,所以我认为替换应该很简单.返回的迭代器存储在自动类型变量(auto res = map.find(x))中
在C 11中,我有以下联盟: union SomeData { std::uint8_t Byte; std::uint16_t Word; std::uint32_t DWord; unsigned char String[128]; }; 如果我初始化联盟, SomeData data {}; 是否保证工会的全部内容将“零”出来?换个方法是一个空的列表初始化程序
有可能实现这样的事情: template<typename Signature> class Test { public: //here I want operator () to respect the signature }; Test<void(int)> t1; //void operator()(int) Test<void(int, floa