Questions tagged «c++11»

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

8
C ++ 11引入了标准化的内存模型。这是什么意思?它将如何影响C ++编程?
C ++ 11引入了标准化的内存模型,但这究竟意味着什么?它将如何影响C ++编程? 这篇文章(由加文·克拉克(Gavin Clarke)引用赫伯·萨特(Herb Sutter)表示)说, 内存模型意味着C ++代码现在有一个标准化的库可以调用,而不管编译器的创建者和运行平台是什么。有一种标准方法可以控制不同线程如何与处理器的内存通信。 “当你在谈论分裂[代码]在不同的内核,就是在标准,我们正在谈论的内存模型。我们要优化它没有打破以下假设人会在代码中做出,” 萨特说。 好吧,我可以记住这一段以及网上可以找到的类似段落(因为我从出生就拥有自己的记忆模型:P),甚至可以发布它作为对其他人提出的问题的答案,但是老实说,我并不完全理解这个。 C ++程序员甚至以前都曾开发过多线程应用程序,那么,它是POSIX线程,Windows线程还是C ++ 11线程又有什么关系呢?有什么好处?我想了解底层细节。 我还感觉到C ++ 11内存模型与C ++ 11多线程支持某种程度上相关,因为我经常将两者结合在一起。如果是的话,究竟如何?为什么要关联它们? 由于我不了解多线程的内部原理以及内存模型的一般含义,请帮助我理解这些概念。:-)


12
什么是移动语义?
我刚刚结束了对Scott Meyers进行的有关C ++ 0x的Software Engineering广播播客采访。大多数新功能对我来说都是有意义的,除了一个功能,我现在对C ++ 0x感到非常兴奋。我仍然没有移动语义 ……这到底是什么?

21
为什么要使用指针而不是对象本身?
我来自Java背景,已经开始使用C ++处理对象。但是我想到的一件事是,人们经常使用指向对象的指针,而不是对象本身,例如以下声明: Object *myObject = new Object; 而不是: Object myObject; 或者,而不是使用函数testFunc(),像这样说: myObject.testFunc(); 我们必须写: myObject->testFunc(); 但是我不知道为什么我们要这样做。我认为这与效率和速度有关,因为我们可以直接访问内存地址。我对吗?
1598 c++  c++11  pointers  c++-faq 


11
什么是rvalue,lvalue,xvalue,glvalue和prvalue?
在C ++ 03中,表达式是rvalue或lvalue。 在C ++ 11中,表达式可以是: 右值 左值 值 总值 前值 两个类别已变成五个类别。 这些新的表达类别是什么? 这些新类别与现有的右值和左值类别有何关系? C ++ 0x中的rvalue和lvalue类别与C ++ 03中的类别相同吗? 为什么需要这些新类别?是WG21神只是想迷惑我们凡人?
1356 c++  expression  c++-faq  c++11 

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

4
T &&(双“&”号)在C ++ 11中是什么意思?
我一直在研究C ++ 11的一些新功能,而我注意到的一个是在声明变量(如)时使用了双“&”号T&& var。 首先,这只野兽叫什么?我希望Google允许我们搜索这样的标点符号。 这到底是什么意思? 乍一看,它似乎是一个双重引用(如C样式的双指针T** var),但是我很难考虑到这种情况的用例。

7
push_back和emplace_back
我对push_back和之间的区别感到困惑emplace_back。 void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); 由于有一个push_back重载引用右值引用,我不太明白它的目的是emplace_back什么?


13
将const std :: string&作为参数传递的日子已经过去了吗?
我听取了香草萨特最近的谈话谁建议的理由来传递std::vector和std::string利用const &在很大程度上消失了。他建议现在编写诸如以下的函数是可取的: std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; } 我知道return_val在函数返回时,它将是一个右值,因此可以使用移动语义来返回,这非常便宜。但是,inval它仍然比引用(通常实现为指针)的大小大得多。这是因为a std::string具有各种组件,包括指向堆的指针和char[]用于短字符串优化的成员。因此在我看来,通过引用传递仍然是一个好主意。 谁能解释为什么Herb可能会这么说?
604 c++  c++11 


13
nullptr到底是什么?
现在,我们有了具有许多新功能的C ++ 11。新的(至少对我而言)是一个有趣而令人困惑的人nullptr。 好了,不再需要讨厌的宏NULL。 int* x = nullptr; myclass* obj = nullptr; 不过,我仍无法了解其nullptr工作原理。例如,维基百科文章说: C ++ 11通过引入一个新的关键字作为一个独特的空指针常量:nullptr 来纠正此问题。它的类型为nullptr_t,可以隐式转换,并且可以与任何指针类型或指针到成员类型进行比较。除了布尔型,它不能隐式转换或与整数类型媲美。 关键字和类型实例如何? 此外,您是否还有另一个示例(除了Wikipedia之外)nullptr优于旧的示例0?
570 c++  pointers  c++11  nullptr 


6
迭代器失效规则
C ++容器的迭代器失效规则是什么? 最好是摘要列表格式。 (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,则可以在开始所有这些操作的meta上进行发布。)该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)
543 c++  c++11  iterator  c++17  c++-faq 

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.