Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。

7
在C ++中,从函数返回向量仍然是不好的做法吗?
简短版本:通常以许多编程语言返回大对象(例如向量/数组)。如果该类具有move构造函数,那么C ++ 0x现在可以接受这种样式吗,还是C ++程序员认为它是怪异的/丑陋的/讨厌的? 长版:在C ++ 0x中,仍然认为这是错误的形式吗? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); 传统版本如下所示: void BuildLargeVector(std::vector<std::string>& result); ... std::vector<std::string> v; BuildLargeVector(v); 在较新的版本中,从返回的值BuildLargeVector是一个右值,因此将使用std::vector(N)RVO不发生的move构造函数构造v 。 甚至在C ++ 0x之前,由于(N)RVO,第一种形式通常也很“高效”。但是,(N)RVO由编译器决定。现在我们有了右值引用,可以保证不会进行深层复制。 编辑:问题实际上不是关于优化。所示的两种形式在现实程序中的性能几乎相同。过去,第一种形式的性能可能会降低几个数量级。结果,很长一段时间以来,第一种形式是C ++编程中的主要代码味道。我希望不再了吗?

2
C ++ 11中的随机数生成:如何生成,它如何工作?[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,因此不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 9年前关闭。 最近,我遇到了一种在C ++ 11中生成随机数的新方法,但是无法消化我所读到的论文(该引擎是什么,数学术语就像“ 分布”,“产生的所有整数均可能相等 ”)。 所以任何人都可以解释一下 这些是什么? 他们是什么意思? 怎么产生的? 他们如何工作? 等等 您可以在一个有关随机数生成的常见问题解答中将其全部调用。
102 c++  c++11  random 

2
C ++ 0x Lambda按值捕获始终是const吗?
有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获并调用一个非const但应该是的方法。 以下代码不会编译,但通过使foo :: operator()const可以对其进行修复。 struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }
102 c++  lambda  const  c++11 

6
过滤STL容器的现代方法?
在使用了C#多年之后,我又回到C ++了,我想知道现代的方式-阅读:C ++ 11-筛选数组的方式,即如何实现类似于此Linq查询的内容: var filteredElements = elements.Where(elm => elm.filterProperty == true); 为了过滤元素向量(strings出于这个问题)? 我衷心希望现在已取代需要定义显式方法的旧STL样式算法(甚至是扩展boost::filter_iterator)。
102 c++  c++11  stl 

3
gcc 4.8或更早的关于正则表达式的错误吗?
我正在尝试在C ++ 11的一段代码中使用std :: regex,但是似乎该支持有点问题。一个例子: #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" << …
101 c++  regex  gcc  c++11  libstdc++ 

8
C ++ 11中是否存在用于基于范围的for循环的范围类?
我发现自己是在不久前写的: template <long int T_begin, long int T_end> class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

13
我可以在C ++中实现自治的`self`成员类型吗?
C ++ 缺少等效于PHP的selfkeyword 的关键字,该关键字的值取决于封闭类的类型。 在每个类别的基础上伪造它很容易: struct Foo { typedef Foo self; }; 但我不得不Foo再次写信。也许有一天我会弄错这个错误,并导致一个无声的错误。 我可以使用和的某种组合decltype来“自动”进行此工作吗?我已经尝试了以下方法,但是this在那个地方无效: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (我不必担心的等效项static,它的作用相同,但绑定较晚。)
101 c++  c++11 

3
如何在无序容器中将std :: hash <Key> :: operator()专用于用户定义的类型?
为了支持用户定义的键类型std::unordered_set&lt;Key&gt;和std::unordered_map&lt;Key, Value&gt; 一个具有提供operator==(Key, Key)和散列函子: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; 仅std::unordered_set&lt;X&gt; 使用type 的默认哈希值编写将更方便X,例如与编译器和库一起提供的类型。经过咨询 C ++标准草案N3242§20.8.12 [unord.hash]和§17.6.3.4[hash.requirements], 增强无序 g ++ include\c++\4.7.0\bits\functional_hash.h …

5
与C ++中的普通指针相比,智能指针的开销是多少?
与C ++ 11中的普通指针相比,智能指针的开销是多少?换句话说,如果我使用智能指针,我的代码会变慢吗?如果这样,速度会慢多少? 具体来说,我在问C ++ 11 std::shared_ptr和std::unique_ptr。 显然,被压入堆栈的东西会更大(至少我认为是这样),因为智能指针还需要存储其内部状态(引用计数等),所以问题的实质是,这将要花费多少呢?会影响我的表现吗? 例如,我从函数而不是普通指针返回智能指针: std::shared_ptr&lt;const Value&gt; getValue(); // versus const Value *getValue(); 或者,例如,当我的函数之一接受智能指针作为参数而不是普通指针时: void setValue(std::shared_ptr&lt;const Value&gt; val); // versus void setValue(const Value *val);

7
如何将std :: unique_ptr传递给函数
如何将a传递std::unique_ptr给函数?可以说我有以下课程: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; 以下内容无法编译: void MyFunc(unique_ptr&lt;A&gt; arg) { cout &lt;&lt; arg-&gt;GetVal() &lt;&lt; endl; } int main(int argc, char* argv[]) { unique_ptr&lt;A&gt; ptr = unique_ptr&lt;A&gt;(new A(1234)); MyFunc(ptr); return 0; } 为什么不能将a传递std::unique_ptr给函数?当然这是构建的主要目的吗?还是C ++委员会打算让我退回到原始C风格的指针并像这样传递它: …
101 c++  c++11  unique-ptr 


3
gcc std :: unordered_map实现慢吗?如果是这样-为什么?
我们正在用C ++开发高性能的关键软件。在那里,我们需要一个并发的哈希映射并实现一个。因此,我们编写了一个基准来确定与并发哈希图相比要慢多少std::unordered_map。 但是,这std::unordered_map似乎太慢了……所以这是我们的微基准测试(对于并发映射,我们产生了一个新线程,以确保不会对锁定进行优化,并且请注意,我从不插入0,因为我也使用进行了基准测试google::dense_hash_map,需要一个空值): boost::random::mt19937 rng; boost::random::uniform_int_distribution&lt;&gt; dist(std::numeric_limits&lt;uint64_t&gt;::min(), std::numeric_limits&lt;uint64_t&gt;::max()); std::vector&lt;uint64_t&gt; vec(SIZE); for (int i = 0; i &lt; SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map&lt;int, long double&gt; map; auto begin = std::chrono::high_resolution_clock::now(); for (int i = 0; …

2
std :: result_of和decltype之间的区别
我在理解std::result_ofC ++ 0x 的需求时遇到了一些麻烦。如果我理解正确,result_of它用于获得使用某些类型的参数调用函数对象的结果类型。例如: template &lt;typename F, typename Arg&gt; typename std::result_of&lt;F(Arg)&gt;::type invoke(F f, Arg a) { return f(a); } 我看不出以下代码有什么区别: template &lt;typename F, typename Arg&gt; auto invoke(F f, Arg a) -&gt; decltype(f(a)) //uses the f parameter { return f(a); } 要么 template &lt;typename F, typename Arg&gt; auto invoke(F f, Arg …
100 c++  c++11  decltype  result-of 

11
编译时间字符串哈希
我在几个不同的地方读到,使用C ++ 11的新字符串文字可能在编译时计算字符串的哈希值。但是,似乎没有人愿意提出来,说这将是可能的或如何实现的。 这可能吗? 操作员会是什么样子? 我对这样的用例特别感兴趣。 void foo( const std::string&amp; value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } 注意:编译时哈希函数不必看起来像我写的那样。我尽力猜测最终的解决方案是什么样的,但meta_hash&lt;"string"_meta&gt;::value也可能是可行的解决方案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.