c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
参见英文答案 > How do I avoid implicit conversions on non-constructing functions?                                    7个 我有一个功能: void foo(int n) { std::cout << "foo(int)\n"; } 可以使用不同的参数调用,可以是char,double,
我正在研究一个Arduino项目,这意味着C方言目前是C 11的gnu 11超集,并且stdlib不可用(没有元组,没有数组,没有任何东西;命名空间std只是空的!). 出于优化原因(CPU有16K的FLASH,2K的RAM和这个特殊的低电压版本运行在8MHz)我希望编译器尽可能地预先计算以提供运行时代码,尤其是中断服务程序,“友好的“数据. 现在我想做的是以下内容: 给定一个(唯一的)整数列表,
在C中处理泛型代码时,我会发现std :: identity functor(如std :: negate)非常有用.有没有特殊原因导致标准库中没有这个? 引入std :: identity后不久,问题开始出现,从冲突到std :: identity的pre-cpp98定义开始,显示为扩展: https://groups.google.com/a/isocpp.org/forum/#!topic/
我不确定以下代码是如何工作的.我以为你必须做{‘h’,’e’……等……但似乎工作得很好.另一方面,如果你执行std :: array< const char *,它只会向数组添加一个元素.字符串文字初始化是否有特殊规则? std::array<char, strlen("hello world!") + 1> s = {"hello world!"}; for (size_t i = 0; i <
我们来看看是否 struct Thing { int foo(double, bool) {return 0;} }; 在编译期间有int foo(double,bool)成员函数.有很多方法可以做到这一点,大多数只是其他方式的变体.有人会想到一种与我在这里提到的5种方式截然不同(或至少相当有创意)的方式吗?我只是想学习一些模板和SFINAE的新技术. #include <iostream
MSDN page for developers有以下代码片段: // Move constructor. MemoryBlock(MemoryBlock&& other) : _data(nullptr), _length(0) { std::cout << "In MemoryBlock(MemoryBlock&&). length = " <
我担心我可能会遗漏一些微不足道的东西,但是如果你想保留原始的无符号值,似乎没有实际的安全方式来转换为签名类型. 在reinterpret_cast上,5.2.10没有列出整数到整数的转换,因此没有定义(而static_cast定义没有额外的转换).关于积分转换4.7.3基本上说大型无符号的转换将是实现定义的(因此不可移植). 这似乎有限,因为我们知道,例如,uint64_t应该在任何硬件上安全地转
我有一个类似于以下的类: struct Config { using BindingContainer = std::map<ID, std::vector<Binding>>; using BindingIterator = BindingContainer::mapped_type::const_iterator; boost::iterator_range<Bindin
关于ODR有很多问题,但是我找不到我要找的东西,所以如果这个副本或标题不合适就道歉. 考虑以下: struct t {t(*id)();}; template<typename T> t type() {return {type<T>};} 这是我对定义unique identifier per type的尝试的过度简化,希望在不同的编译单元中保持唯一. 特别是,给定一个类似于std :: st
我正在阅读 http://en.cppreference.com/w/cpp/thread/condition_variable上的std :: condition_variable,我不明白这一点: Even if the shared variable is atomic, it must be modified under the mutex in order to correctly pu
我有一个以下时间格式的字符串: “%Y-%m-%d%H:%M:%S.%f” 其中%f是毫秒,例如:14:31:23.946571 我希望这是一个计时时间点.有演员这样做吗? 没有从std :: string转换为std :: chrono :: time_point.您必须构建std :: chrono :: time_point对象. >使用除微秒之外的所有内容来构造std :: tm对象(<
min算法通常表示如下: template <typename T> const T& min(const T& x, const T& y) { return y < x ? y : x; } 但是,这不允许形式为min(a,b)= 0的构造.您可以通过额外的重载来实现: template <typename T> T& min(T& x, T& y) { return y <
我正在尝试删除元组的最后一个元素.当我在元组中只有一个元素要移除时,它可以工作.但是当我不止一个时,事情就出错了.我不明白为什么这不起作用.这些是我得到的错误: prog.cpp: In function ‘int main()’: prog.cpp:24:22: error: incomplete type ‘remove_last<std::tuple<int, int> >’ used in
在阅读有关向标准库添加const传播包装器的提议时(文档编号 N4388),我碰到了论文中给出的示例: #include <memory> #include <iostream> struct A { void bar() const { std::cout << "A::bar (const)" << std::endl; } void bar
我注意到,当我初始化一个字符串时,编译器报告了一个我没想到的错误. 例如: #include <iostream> #include <string> using namespace std; int main() { string s1 = "Hello", s2 = "World!"; // ok string s3 = s1 + ", " + "World!"; // o
我已经看到了一个 CRTP solution,它将接口提取到基类中,并且只为每个基类提供了一个包参数.然后,派生程度最高的类继承了所有friended基类并实现了接口. 我不能使用这种方法,因为我需要保护赋值运算符,它不是继承的. 此外,由于赋值运算符具有仅具有一个参数的已定义签名,因此我无法使用key pattern. 这就是我想要的: template <typename... F> stru
在我正在处理的一些代码中,我有一个迭代遍历地图的for循环: for (auto it = map.begin(); it != map.end(); ++it) { //do stuff here } 我想知道是否有某种方法可以简明扼要地写出以下内容: for (auto it = map.begin(); it != map.end(); ++it) { //do stuff
我发现嵌套的lambda表达式编译和生成巨大的.obj文件非常慢.例如,在我的计算机上,以下代码生成一个大小为4766 KB的obj文件: int main() { auto f = [] { auto f = [] { auto f = [] { auto f = [] { auto f = []
我正在尝试使用地图的C 11 emplace()函数,但NetBeans说地图没有这样的功能.看看标题,它是“正确的” – 没有提到(在Fedora 16上)的emplace().哪个都很好,你知道……但我有点想使用emplace(). 如何启用此功能?我知道它自去年3月以来可能存在,可能更早.彻底的搜索显示,emplace()基本上只存在于我的系统中的列表和向量的标题中.由于近十年来没有对C进行
问题 我有一个很多Foo的std :: vector struct Foo { int m_i; char m_c; char m_padding[3]; // want to replace this }; 我可以一次性以二进制形式快速编写这个连续Foo的块. 我的问题是,如果我没有明确地输入m_padding,计算它,并自己清除它,valgrind会抱怨未初始化的写入.