c++11相关内容
我是C ++的初学者。我正在阅读C ++ Primer,当一个表达式产生一个对象类型时,以及当它产生一个对象的引用类型时,我不太明白。 我从书中引用: 当我们将decltype应用于不是变量的表达式时, 一般来说,decltype返回一个引用类型,用于生成可以位于作业左侧的 对象。 $ b 考虑以下代码: int i = 3,* ptr =& i,& ref =
..
为什么没有 std :: protect 与 std :: bind 一起使用++ 11 ? Boost.Bind 提供 boost :: protect helper,它包装它的参数,使 boost :: bind 不能识别和评估它。 std :: [c] ref 将是一个很好的替代大多数时间,除了它不会采用 rvalue 作为参数。 对于一个具体的例子,请考虑以下人为情况:
..
请考虑以下内容。 #include
..
我已经看到,为了检查类型 T 是一个类,我可以使用 bool isClass = std :: is_class :: value; 对于类和结构体都返回true。我知道在C ++他们几乎是一样的东西,但我想知道为什么他们之间没有区别在类型特征。 解决方案 对于类和结构体都返回true。我知道在C ++他们几乎是一样的东西,但我想知道为什么他们之
..
尝试1:我想要一个类C的静态constexpr成员类型C.这是可能在C ++ 11吗? struct Foo { constexpr Foo(){} static constexpr Foo f = Foo }; constexpr Foo Foo :: f; g ++ 4.7.0说:“无效使用不完全类型”指的是 Foo() 尝试2: s
..
std :: function 优于原始 T1(*)(T2) code>? 解决方案 std :: function 多于函数指针,即函子。 #include void foo(double){} struct foo_functor { void operator()(float)const {} }; in
..
当我尝试编译这个简单的程序: #include void f(){ std :: this_thread :: sleep_for(std :: chrono :: seconds(3)); } int main(){ std :: thread t(f); t.join(); Ubuntu 10.04上的gcc版本4.4.3(32位): }
..
TTBOMK,有三种方式在C ++中初始化变量。 int x = 0; // C-like initialization int x(0); //构造器初始化 int x {0}; //统一初始化 为C ++ 11提供了统一的初始化,用于初始化不同类型的变量,这在C ++ 03中需要不同的语法。 c样,构造函数和均匀初始化之间有什么区别? 解决方案
..
我知道通常不是一个好主意返回 std :: move ,即 bigObject foo(){bigObject result; /*...*/ return std :: move(result); } 而不是简单 bigObject foo(){bigObject result; /*...*/ return result; } ,因为它阻碍
..
如何将std :: chrono :: time_point转换为带分数秒的日历datetime字符串? 例如:“10-10-2012 12:38:40.123456”。 解决方案 如果是system_clock,有time_t转换。 #include #include #include 使用命名空间std :
..
共享指针如何知道有多少个指针指向该对象? (shared_ptr,在这种情况下) 解决方案 基本上, shared_ptr 指针:指向共享对象的指针和指向包含两个引用计数的结构的指针:一个用于“强引用”,一个用于具有所有权的引用,另一个用于“弱引用”或不具有所有权的引用。 / p> 复制 shared_ptr 时,复制构造函数会增加强引用计数。当销毁一个 shared_ptr 时,析
..
使用 std :: async 而不是手动创建 std :: thread 对象的一个优点是是 std :: async 可以使用线程池下的覆盖,以避免超额预订问题。但是哪些实现这样做?我的理解是微软的实现,但是这些其他 async 实现呢? Gnu的libstdc ++ Gnu的libc ++ Just Software的库 Boost boost :: thread :: as
..
在C ++ 11中,您可以使用 shared_ptr 建立与对象或变量和 weak_ptr / code>与对象或变量建立所有权关系。但是如果其他的,非拥有的对象想要引用该对象呢? weak_ptr 在此情况下无效。原始指针是有用的,但带来了各种缺点(例如,他们可以自动初始化为nullptr ,但这是通过与 std :: * _ ptr
..
请考虑以下内容: struct vec { int v [3] vec():v(){}; vec(int x,int y,int z):v {x,y,z} {}; vec(const vec& that)= default; vec& operator =(const vec& that)= default; 〜vec()= default; vec&
..
在查看有效的方式计算p ^ q(指数)时,其中q是整数,并查看C ++ 98和C ++ 11标准我注意到,显然在C ++ 11中删除了 std :: pow(double,int) overload。 在C ++ 98 26.5 / 6中有 double pow(double,int); 签名。 在C ++ 11 26.8,我可以发现是重载,取一对 float , double 或 l
..
我们知道 T v(x); 被称为直接初始化,而 T v = x; 被称为复制初始化,意味着它将从 x 构造一个临时 T / code>将被复制/移动到 v (这很可能被省略)。 对于列表初始化,标准区分两种形式,具体取决于上下文。 T v {x}; 被称为直接列表初始化 c $ c>被称为 copy-list-initialization : §8.5.4[dcl.init.list
..
可能重复: 在哪里可以找到当前的C或C ++标准文档? 在哪里可以找到完整的C ++ 11标准?我知道它的特点是浮动在互联网上,但我似乎找不到文档本身。 解决方案 完整的最终标准,直接来自 ISO ,或某些国家机构。 您可能不想匆忙。 ANSI(对于一个)通常重新发布具有相同技术材料的官方版本 - 基本上唯一的变化是在标题页上说“ANSI / ISO”,而不是只是“ISO
..
特别是,初始化列表的显示真的很糟糕: vector
..
我刚刚发现有一点,C ++ 11草稿有 std :: begin / std :: end 重载 std :: pair 允许将一对迭代器视为适合在基于范围的for循环中使用的范围(N3126,第20.3.5.5节) 有人知道为什么会被移除吗? 非常不幸,因为它似乎没有其他方法来对待一对迭代器作为一个范围。确实: 在基于范围的for循环中,begin / end的查找规则表示be
..
目前,我只能使用以下方式执行基于范围的循环: for(auto& value:values) 但是有时我需要一个迭代器的值,而不是一个引用(无论什么原因)。是否有任何方法而不必通过整个向量比较值? 解决方案 使用旧的 循环为: for(auto it = values.begin(); it!= values。 end(); ++ it) { auto&
..