c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
在信号处理程序中使用 std::condition_variable::notify_one是否安全?例: enum State { DoNot, Do, }; State state; std::mutex mutex; // worker thread std::thread th = std::thread([]() { std::unique_lock<std::mute
是否有任何编译器能够通过std :: tuple对函数返回的多个值进行返回值优化?需要说明的是,在下面的代码中,是否有任何编译器能够避免不必要的副本? std::vector<int> a; std::list<float> b; std::tie(a,b) = myFunctionThatReturnsAVectorAndList(); 这不值得担心.如果编译器无法执行RVO,则 move se
参见英文答案 > How to make my custom type to work with “range-based for loops”?                                    7个 我有一个这样的课: class Foo { private: int a,b,c,d; char bar; double m,n public:
可以通过可变引用捕获对象,并在成员函数内部进行更改,该成员函数采用与const相同的对象. void g(const int& x, std::function<void()> f) { std::cout << x << '\n'; f(); std::cout << x << '\n'; } int main() { int y = 0; auto f = [&y] {
最近我设计了元类型和允许编译时类型连接的可能操作: #include <tuple> template<template<typename...> typename T> struct MetaTypeTag {}; /*variable template helper*/ template<template<typename...> typename T> constexpr MetaTyp
我正在使用C 11 std :: thread.它的主循环包括一个阻塞的recvfrom()调用,它监听到达DATAGRAM套接字的UDP数据包,以及一些复杂的代码,用于解析消息并在进程中处理大量的STL容器. 该线程属于一个类(helloexchange),由构造函数启动,应该在析构函数中取消. 出于显而易见的原因,我不想强​​行终止线程,因为这可能会破坏数据结构,这些数据结构部分位于类之外.
继 my answer至 this question讨论之后,显然: 允许以下代码 struct Foo { int x; }; Foo f; Foo & f_ref = f; (&f) -> ~Foo (); new (&f) Foo (); int x = f_ref .x; 但不允许使用以下代码 struct Foo { const int & x;
我不明白应该如何使用以下功能.当我调用A :: f时我可以省略模板参数,但我不明白为什么. template <typename... Args> struct A { template <Args...> void f() {} }; int main() { A<int, bool> a; a.f(); } 具体而言,模板< Args ...>是什么?是什么意
C 11标准8.5.4.3说: “如果初始化列表没有元素而T是具有默认构造函数的类类型,则该对象是值初始化的.” struct A { int get() { return i; } private: int i; }; int main() { A a = {}; int n = a.get(); cout << n << endl; //
我知道constexpr变量可以在编译时使用. 例如,对于模板或静态asser. 但如果我想在没有constexpr的情况下这样做,我可以使用static const. 什么是自C 11/14引入constexpr之间的区别 constexpr int a = 3; //AND static const int a = 3; 谢谢! 另一种看待这个问题的方法是我应该使用哪种方法? 我知道的主要区别
编辑:完全重新编辑,因为原来正在成为一个非结构化的混乱:)感谢所有人的输入到目前为止;我希望我在下面的文本中使用它. 题 我正在寻找一个懒惰创建的可共享指针.我有一个假设的大班Thing.事情很大,制作起来也很昂贵,但是虽然它们在代码中的任何地方都被使用(共享,传递,修改,存储供以后使用等),但实际上它们实际上并没有被使用,所以它们实际上是在拖延创建直到实际访问它们是可取的.因此,需要懒惰地创造,
标准允许在整数类型,枚举和std :: bitset之间进行选择. 在给定这些选择的情况下,为什么库实现者会使用其中一个? 例如,llvm的libcxx似乎使用了这些实现选项中的两个(至少)两个的组合: ctype_base :: mask使用整数类型实现: <__locale> regex_constants :: syntax_option_type是使用枚举重载运算符实现的: <regex>
在考虑问题 std::initializer list from already existing std::array without enumerating each element的解决方案时,我开发了与 bolov类似的机制,但没有构建对象,而只是初始化列表.我很惊讶我的解决方案不起作用,我无法弄清楚原因. #include <initializer_list> #include <ios
在C 11之前,一直都是复制赋值运算符应该总是通过const引用的情况,如下所示: template <typename T> ArrayStack<T>& operator= (const ArrayStack& other); 但是,随着移动赋值运算符和构造函数的引入,似乎有些人主张使用pass by value进行复制赋值.还需要添加移动赋值运算符: template <typename T
在C#中使用它们后,我正在尝试使用lambda中的lambda.我目前有一个boost元组(这是真正简化的版本). typedef shared_ptr<Foo> (*StringFooCreator)(std::string, int, bool) typedef tuple<StringFooCreator> FooTuple 然后我将全局命名空间中的函数加载到我的FooTuple中.理想情况
我最近问了这个问题: Using this pointer causes strange deoptimization in hot loop 问题是我正在写一个类型为uint8_t的数组,并且编译器将其视为可以使用方法的this指针(类型为struct T *)进行别名,因为void *和char *(= uint8_t *)可以始终别名C中的任何其他指针.此行为导致错过优化机会.当然,我想避免
从我的角度来看,我发现了很奇怪的行为:函数默认参数不能在下面的代码中转发. void Test(int test = int{}) {} template<typename F, typename ...Args> void Foo(F&& f, Args&&... args) { std::forward<F>(f)(std::forward<Args>(args)...); } i
我想在向量中访问类型擦除类型的getter. getter标记为const.不知何故,const-ness不会传播到boost :: any包装器对象.最小的例子 #include <iostream> #include <vector> #include <boost/mpl/vector.hpp> #include <boost/type_erasure/any.hpp> #include
7.1.6.1/1包含以下声明(强调我的): There are two cv-qualifiers, const and volatile. If a cv-qualifier appears in a decl-specifier-seq, the init-declarator-list of the declaration shall not be empty. 以上粗体语句的相关性是什么
我需要在类中存储通用引用(我确信引用的值将比类更长).这样做有规范的方法吗? 这是我提出的最小例子.它似乎有效,但我不确定我是否做对了. template <typename F, typename X> struct binder { template <typename G, typename Y> binder(G&& g, Y&& y) : f(std::forward<G