Tag: c ++ 11

三规则与C ++ 11成为五大规则?

所以,在看了这个关于右值引用的精彩演讲后,我认为每个类都会受益于这样一个“移动构造函数”, template<class T> MyClass(T&& other) ,当然还有一个“移动赋值运算符”, template<class T> MyClass& operator=(T&& other)正如Philipp在他的回答中指出的那样,如果它有dynamic分配的成员,或者通常存储指针。 就像你应该有一个copy-ctor,赋值运算符和析构函数,如果前面提到的点适用。 思考?

什么是智能指针,什么时候该用?

什么是智能指针,什么时候该用?

迭代器失效规则

什么是C ++容器的迭代器失效规则? 最好以摘要列表格式。 (注意:这是一个Stack Overflow的C ++常见问题解答的入口,如果你想批评在这个表单中提供FAQ的想法,那么在这个开始所有这些的meta上的贴子将是这个地方的答案。那个问题在C ++聊天室中进行监控,常见问题解决scheme首先出现,所以你的答案很可能会被那些提出这个想法的人阅读)。

什么是移动语义?

我刚听完关于C ++ 0x的关于Scott Meyers的软件工程无线电播客采访 。 大部分新function对我来说都是有意义的,现在我对C ++ 0x兴奋不已,除了一个。 我仍然没有得到移动语义 …他们究竟是什么?

一个正面的lambda:'+ {}' – 这是什么巫术?

在堆栈溢出的问题重新定义在C ++ 11不允许的lambdas,为什么? ,一个小程序不能编译: int main() { auto test = []{}; test = []{}; } 问题得到解答,一切似乎都很好。 然后来到Johannes Schaub ,做了一个有趣的观察 : 如果你在第一个lambda之前加上+ ,神奇地开始工作。 所以我很好奇:为什么下面的工作? int main() { auto test = +[]{}; // Note the unary operator + before the lambda test = []{}; } 它用GCC 4.7+和Clang 3.2+编译得很好。 代码标准是否符合?

`constexpr`和`const`之间的区别

constexpr和const什么区别? 我什么时候可以只使用其中一个? 我什么时候可以使用,我应该如何select?

在C ++ 11中对字符串文字进行Unicode编码

在相关的问题之后 ,我想问一下C ++ 11中的新字符和字符串文字类型。 现在看来,我们现在有四种字符和五种字符串文字。 字符类型: char a = '\x30'; // character, no semantics wchar_t b = L'\xFFEF'; // wide character, no semantics char16_t c = u'\u00F6'; // 16-bit, assumed UTF16? char32_t d = U'\U0010FFFF'; // 32-bit, assumed UCS-4 和字符串文字: char A[] = "Hello\x0A"; // byte string, "narrow encoding" wchar_t B[] = L"Hell\xF6\x0A"; // wide […]

返回值优化或移动?

我不明白当我应该使用std::move ,当我应该让编译器优化…例如: using SerialBuffer = vector< unsigned char >; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); // Return Value Optimization return buffer; } // explicit move SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( […]

make_unique和完美的转发

为什么标准C ++ 11库中没有std::make_unique函数模板? 我发现 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 有点冗长。 以下不会更好吗? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); 这隐藏了new很好,只提到一次类型。 无论如何,这是我尝试执行make_unique : template<typename T, typename… Args> std::unique_ptr<T> make_unique(Args&&… args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)…)); } 我花了相当长的时间才得到std::forward东西来编译,但我不确定是否正确。 是吗? std::forward<Args>(args)…是什么意思? 编译器做了什么?

C ++ 11中“typedef”和“using”有什么区别?

我知道在C ++ 11中,我们现在可以using typedef s using类型别名: typedef int MyInt; 据我所知,相当于: using MyInt = int; 这种新的语法来自于努力去表达“ template typedef ”: template< class T > using MyType = AnotherType< T, MyAllocatorType >; 但是,在前两个非模板的例子中,标准还有其他的细微差别吗? 例如, typedef以“弱”方式进行别名。 也就是说,它不会创建新的类型,而只是一个新的名称(这些名称之间的转换是隐含的)。 它是using相同还是生成一个新的类型? 有什么区别?