Tag: c ++ 11

使用forward的优点

在完美转发中,使用std::forward将指定的右值引用t1和t2转换为未命名的右值引用。 这样做的目的是什么? 如果我们将t1和t2作为左值,那么这将如何影响被调用的函数inner ? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

“解包”一个元组来调用一个匹配的函数指针

我试图存储在一个std::tuple不同数量的值,这将被用作参数调用一个函数指针匹配存储的types的参数。 我创build了一个简化的例子来展示我正在努力解决的问题: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename …Args> struct save_it_for_later { std::tuple<Args…> params; void (*func)(Args…); void delayed_dispatch() { // How can I "unpack" params to call func? func(std::get<0>(params), std::get<1>(params), std::get<2>(params)); // But […]

为什么从std :: istream读取logging结构字段失败,我该如何解决?

假设我们有以下情况: 一个logging结构声明如下 struct Person { unsigned int id; std::string name; uint8_t age; // … }; logging使用以下格式存储在文件中: ID Forename Lastname Age —————————— 1267867 John Smith 32 67545 Jane Doe 36 8677453 Gwyneth Miller 56 75543 J. Ross Unusual 23 … 应读入文件以收集任意数量的上述Personlogging: std::istream& ifs = std::ifstream("SampleInput.txt"); std::vector<Person> persons; Person actRecord; while(ifs >> actRecord.id >> actRecord.name >> actRecord.age) […]

漂亮的C ++ STL容器

请注意这篇文章末尾的更新。 更新:我已经在GitHub上为这个库创build了一个公共项目 ! 我想有一个单一的模板,一劳永逸地照顾漂亮的打印所有STL容器通过operator<< 。 在伪代码中,我正在寻找这样的东西: template<container C, class T, String delim = ", ", String open = "[", String close = "]"> std::ostream & operator<<(std::ostream & o, const C<T> & x) { o << open; // for (typename C::const_iterator i = x.begin(); i != x.end(); i++) /* Old-school */ for (auto i = x.begin(); […]

我为什么不要#include <bits / stdc ++。h>?

我用我的代码发布了一个问题,只有#include指令如下: #include <bits/stdc++.h> 我的老师告诉我这样做,但在评论部分,我被告知我不应该这样做。 为什么?

用成员函数启动线程

我想构build一个std::thread的成员函数,不接受任何参数,并返回void 。 我无法弄清楚任何可行的语法 – 无论如何编译器都会抱怨。 什么是正确的方式来实现spawn()以便它返回一个执行test()的std::thread ? #include <thread> class blub { void test() { } public: std::thread spawn() { return { test }; } };

什么是右值,左值,左值,右值和左值?

在C ++ 03中,expression式是右值或左值 。 在C ++ 11中,expression式可以是: 右值 左值 x值 glvalue prvalue 两类分为五类。 什么是这些新的expression类别? 这些新类别如何与现有的右值和左值类别相关联? C ++ 0x中的右值和左值类别与C ++ 03中的相同吗? 为什么需要这些新类别? WG21神只是想把我们这些凡人混为一谈?

什么是聚合体和POD,以及它们如何/为什么是特殊的?

这个常见问题是关于聚合和PODs,包括以下材料: 什么是聚合 ? 什么是POD (普通旧数据)? 他们有什么关系? 他们如何以及为什么特别? C ++ 11有什么变化?

什么是C ++ 11中的lambdaexpression式?

什么是C ++ 11中的lambdaexpression式? 我什么时候可以用一个? 他们解决什么types的问题在引入之前是不可能的? 一些例子和用例会很有用。

是正则expression式的gcc 4.8或更早的车?

我正在尝试在C ++ 11代码中使用std :: regex,但看起来支持是有点bug。 一个例子: #include <regex> #include <iostream> int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl; std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl; std::cerr << "st|mt|tr" << " matches tr? " […]