Tag: c ++ 11

有没有办法轻松处理函数返回std :: pairs?

C ++ 11有函数std::minmax_element ,它返回一对值。 然而,这样处理和阅读是相当混乱的,并且产生了一个额外的,后来无用的variables来污染范围。 auto lhsMinmax = std::minmax_element(lhs.begin(), lhs.end()); int &lhsMin = *(lhsMinMax.first); int &lhsMax = *(lhsMinmax.second); 有一个更好的方法吗? 就像是: int lhsMin; int lhsMax; std::make_pair<int&, int&>(lhsMin, lhsMax).swap( std::minmax_element(lhs.begin(), lhs.end()));

使用C ++ 11分割string

什么是最简单的方法来分裂一个string使用C + + 11? 我已经看到了这篇文章所使用的方法,但是我觉得应该使用新的标准来减less冗长的方法。 编辑:我想有一个vector<string>作为结果,并能够在一个单一的字符分隔。

C ++中bool值的所有可能值是什么?

这个问题看起来并不那么明显,而且在标准中找不到有关booltypes的更多信息。 根据C ++ 11标准,关于booltypes的相关保证是什么: 存储:需要多less空间,忽略alignment? 是否有任何要存储的值来表示false ? 采取的值:让b为booltypes,断言(b == true) || (b == false) (b == true) || (b == false)持有? (false < true)是否形成良好,是否成立?

alignment在C ++ 11中的性能真的很重要吗?

alignment在C ++ 11中的性能真的很重要吗? 在Stroustrup的书中有一个build议来命令从最大到最小的结构中的成员。 但是我想知道是否有人做了测量,看看这是否有什么区别,以及编写代码时是否值得思考。

为什么这个片段使用统一的初始化编译g ++ 4.6而不是g ++ 4.7?

请注意, 派生使用C ++ 11统一初始化语法来调用基类构造函数。 class base { protected: base() {} }; class derived : public base { public: derived() : base{} // <– Note the c++11 curly brace syntax // using uniform initialization. Change the // braces to () and it works. {} }; int main() { derived d1; return 0; } g ++ 4.6编译这个,但是g […]

function模板的部分sorting – 模糊的调用

考虑一下这个C ++ 11代码: #include <iostream> #include <cstddef> template<typename T> void f(T, const char*) //#1 { std::cout << "f(T, const char*)\n"; } template<std::size_t N> void f(int, const char(&)[N]) //#2 { std::cout << "f(int, const char (&)[N])\n"; } int main() { f(7, "ab"); } 好的,那么select哪个超载? 在将编译器输出的bean溢出之前,让我们尝试对此进行推理。 (所有参考章节均适用于C ++ 11,ISO / IEC 14882:2011的最终标准文档。) 从#1的 T推导到int ,从#2的 N推导到3 ,两个专业都是候选者,两者都是可行的,到目前为止这么好。 […]

自定义types“可绑定”(与std :: tie兼容)

考虑我有一个自定义types(我可以扩展): struct Foo { int a; string b; }; 我如何使这个对象的实例可分配给一个std::tie ,即std::tuple引用的std::tuple ? Foo foo = …; int a; string b; std::tie(a, b) = foo; 失败的尝试: 为tuple<int&,string&> = Foo重载赋值运算符是不可能的,因为赋值运算符是必须是左侧对象成员的二元运算符之一。 所以我试图通过实现一个合适的元组转换运算符来解决这个问题。 以下版本失败: operator tuple<int,string>() const operator tuple<const int&,const string&>() const 他们在赋值时导致错误,告诉“ operator =不会重载tuple<int&,string&> = Foo ”。 我想这是因为“转换为任何types的X +演绎模板参数X for operator =”不能一起工作,只能同时使用其中的一个。 不完美的尝试: 因此,我试图为领带的确切types实现一个转换操作符: operator tuple<int&,string&>() const Demo […]

可以expressionlambdaexpression式的“types”吗?

将lambdaexpression式看作可调用对象的“语法糖”,可以表示无名的基础types吗? 一个例子: struct gt { bool operator() (int l, int r) { return l > r; } } ; 现在, [](int l, int r) { return l > r; } [](int l, int r) { return l > r; }是上述代码的优雅替代品(加上可调用对象的必要创build),但有没有一种方法来expressionGT(types)本身? 一个简单的用法: std::set<int, gt> s1; // A reversed-order std::set // Is there a way to do […]

GCC值得在Windows上使用,以取代MSVC?

我目前使用Visual Studio 2010在Windows上使用C ++进行开发。在官方发布C ++ 11之后,我已经开始使用MSVC中已有的一些function。 但是,正如所料,绝大多数新的变化都不被支持。 我想也许即将到来的Visual Studio版本将添加这些新function。 然而,看完这个后 ,看起来很less有变化。 所以,我很好奇在Windows上使用GCC而不是MSVC的可行性,因为它似乎已经支持绝大多数C ++ 11。 据我所知,这意味着使用MinGW(我还没有看到任何其他本地Windows版本的GCC)。 但是我有疑问这是否值得尝试: 它可以用作cl.exe的替代品,还是会涉及很多黑客和兼容性问题,让Visual Studio使用不同的编译器? Visual Studio的主要卖点在我看来是它的debugging器。 如果你使用不同的编译器,这仍然可用吗? 由于GCC来自* nix世界,而不是Windows原生的,与使用本地MSVC编译器相比,创build本机Windows应用程序时是否存在代码质量问题? (如果重要的话,我的大部分项目都是游戏) 换句话说,我编译的exe的质量会受到使用非Windows本地编译器的影响吗?

C ++ 11的thread_localvariables是否自动静态?

这两个代码段是否有区别: void f() { thread_local vector<int> V; V.clear(); … // use V as a temporary variable } 和 void f() { static thread_local vector<int> V; V.clear(); … // use V as a temporary variable } Backstory:原本我有一个STATIC向量V(用于保存一些中间值,每当我进入函数时它都被清除)和一个单线程程序。 我想把程序变成一个multithreading,所以我不得不摆脱这个静态修饰符。 我的想法是将每个静态变成thread_local,而不是担心别的? 这种方法能适得其反吗?