c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
以下代码在libstdc上触发静态断言: #include <utility> using t = decltype(std::declval<const void>); 应该是? 这个问题的动机: 以下声明实现proposed by Eric Niebler(显然是编译时优化) template<typename _Tp, typename _Up = _Tp&&> _Up __declval
默认构造函数由C编译器生成,用户无法控制它们.他们可以扔吗?在声明一个时,是否可以指定noexcept? 以下代码使用gcc编译好. struct A { A() = default; }; struct B { B() noexcept = default; }; int main() { A a; B b; return 0; } 允许向默认的特殊成员函数(默认构造函
我在使用C 11 std :: mutex时遇到了一些麻烦 在我的课堂上,我有一个名为std :: mutex的信号量变量. 所以我在我的关键部分之前和之后定位了我的semaphore.lock()和semaphore.unlock() class Database { public: Database(string, string, string, string); virtual ~Datab
我正在玩一些玩具代码,使用c 11来更多地了解事情的工作原理.在此期间,我遇到了以下问题,简化为: template <int x, int y> class add { public: static constexpr int ret = x + y; }; constexpr int addFunc(const int x, const int y) { return add
以下C11程序是否形成错误? struct a { struct b { }; void f() {}; }; extern struct a b; struct a ::b; int main() { b.f(); } 为什么不为甚么 这里感兴趣的是这一行: struct a ::b; 这是内部类的前向声明a :: b? 或者这是全局变量b的定义?相当于: st
考虑以下两点: template <class Function> void apply(Function&& function) { std::forward<Function>(function)(); } 和 template <class Function> void apply(Function&& function) { function(); } 在什么情况下有差异,
目前,如果要否定谓词,则必须使用std ::< algorithm> _if_not变体或lambda.但是为了学术,我想知道这是否可行: std::string s("hello"); std::find_if(s.begin(), s.end(), std::not1(::ispunct)); 如果不编写自己的函数对象,如何使这段代码工作? 请记住,将字符传递给来自C标准库的字符分类函数(以及
对于多项式方程求解器,将其模板化以使任何类型可用是很好的: template <class number, int degree> class PolynomialEquation { public: private: array<number, degree+1> myEquation; array<complex<number>, degree> equationResult
当C11对使用noexcept限定词声明的其他函数进行调用时,C 11是否提供内联函数或方法的任何保证? class My_String { ... const char * c_str () const noexcept; inline operator const char * () const { return c_str(); } }; 我假设优化编译器可以自由地实现没有
参见英文答案 > Using `std::function<void(…)>` to call non-void function                                    3个 根据C 11或C 14标准,下面的代码是否有效? #include <functional> int ReturnInt() { return 5; } int main( int a
我想要匹配从给定单词开始的所有行,说iheap.如果我没有错误的正则表达式(在ECMAScript语法中)“^ iheap.*”应该做的伎俩.但是,当我使用libc的正则表达式库在C 11中进行测试时,只有第一行匹配.所以“^ …”似乎只匹配开头的输入而不是起始行. 这是一个例子: #include <string> #include <regex> #include <iostream> us
我(模糊地)知道如果没有使用模板,则不会实例化.例如,即使T = int,T :: type也没有意义,以下代码将会很好地编译. template<typename T> struct A { void f() { using type = typename T::type; } }; A<int> a; //ok 它编译因为f()不被使用,所以它不被实例化 – 因此T :: type的
我是新的std :: thread.我需要把线程从另一个线程睡觉,是可能吗?在示例中,我看到的代码如下: std::this_thread::sleep_for(std::chrono::seconds(1)); 但是我想做的就是这样: std::thread t([]{...}); t.sleep(std::chrono::seconds(1)); 要么     sleep(t,std :: c
我尝试向某些新的代码介绍一些const正确性(实际功能范例),发现我不能通过std :: shared_ptr< A>到一个期望std :: shared_ptr< A const>的函数.请注意,我不想抛弃const,而是介绍它,这与原始指针是合法的. 有没有办法解决这个问题?我没有找到一个成员函数来做到这一点. g 4.6.1发出的精确错误是: error: no matching funct
我理解lambda功能和它在c 11中的目的.但是我不明白“捕获值”和“传递参数”之间的区别. 例如.. #include <iostream> #include <functional> using namespace std; int add(int a,int b){ return a+b; } int main(int argc, char** argv){ func
有没有办法用C 11功能替代 Xmacro成语,最好不要使用预处理器?我正在考虑可以使用元组模板,但我仍然在努力学习这些工作原理. XMacros是进行各种各样事情的一般工具.其中许多(例如创建枚举器,字符串等)的列表远远超出了任何类型的模板的功能. 可能有些情况下您可能会找到替换模板的方法.但当然不是全部.
给出这个代码: struct A { A(int e) { throw e; } }; struct B { A a{42}; // Same with = 42; syntax }; int main() { try { B b; } catch (int const e) { return e; } } 当编译GCC(
对不起,过于模糊的标题(由于缺乏我的英语技能).请建议一个更好的标题. 请考虑以下代码. struct A { typedef std::vector<double> State; // template <class... Args> // A(Args... args) // : a(args...) // {} templa
我有一个类,我想在不同的线程中使用它,我想我可以使用std :: atomic这样的: classs A { int x; public: A() { x=0; } void Add() { x++; } void Sub() { x--; } }; 在我
考虑以下伪代码: expected = null; if (variable == expected) { atomic_compare_exchange_strong( &variable, expected, desired(), memory_order_acq_rel, memory_order_acq); } return variable; 观察当执行变量==期