c++-faq相关内容

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

什么是智能指针,什么时候应该使用? 解决方案 智能指针是一个类,原始“(或”裸“)C ++指针,以管理指向的对象的生命周期。没有单一的智能指针类型,但是他们都试图以实用的方式抽象一个原始指针。 智能指针应该优先于原始指针。如果你觉得你需要使用指针(首先考虑如果你真的),你通常会使用智能指针,因为这可以减轻许多原始指针的问题,主要是忘记删除对象和泄漏内存。 使用原始指针,程序员必 ..
发布时间:2016-10-11 19:45:03 C/C++开发

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

以下各项的正确用途: static_cast dynamic_cast const_cast reinterpret_cast C风格演员 $ c> 函数式转换类型(值) 如何决定在哪些特定情况下使用哪一个? 解决方案 static_cast 是您应该尝试使用的第一个投射。它做类似类型之间的隐式转换(例如 int 到 float 或指向 void * ),它也可以调用 ..
发布时间:2016-10-11 19:44:33 C/C++开发

迭代器无效规则

C ++容器的迭代器无效规则是什么? 最好是以汇总列表格式。 (注意:这是一个条目,用于 Stack Overflow的C ++常见问题。如果您想批评在此表单中提供常见问题解答的概念,则在发起所有这一切的meta上的发布将是这样做的地方。这个问题的答案在 C ++聊天室,其中常见问题的想法从第一位开始,所以您的答案很可能会由想出想法的人阅读。) 解决方案 C ++ 11 (来源 ..
发布时间:2016-10-11 19:44:25 C/C++开发

我什么时候可以使用转发声明?

我正在寻找当我允许在另一个类的头文件中声明一个类的定义: 我允许为一个类? 解决方案 放置自己在编译器的位置:当你转发声明一个类型,所有编译器知道的是这种类型存在;它不知道它的大小,成员或方法。这就是为什么它被称为不完整类型。因此,您不能使用类型来声明成员或基类,因为编译器将需要知道类型的布局。 假设以下前向声明。 class X; 以下是您可以做什么 ..
发布时间:2016-10-11 19:44:22 C/C++开发

什么是移动语义?

我刚刚听完了软件工程部的电台播客关于 C ++ 0x 的Scott Meyers访谈。大多数新功能对我来说很有意义,我现在对C ++ 0x感到兴奋,除了一个。我仍然没有得到移动语义 ...它们是什么? 解决方案 它最容易理解移动语义与示例代码。让我们从一个非常简单的字符串类开始,它只保存一个指向堆分配的内存块的指针: #include #include ..
发布时间:2016-10-11 19:44:12 C/C++开发

C ++中的指针变量和引用变量之间有什么区别?

我知道引用是语法糖,所以代码更容易阅读和写。 但是有什么区别? 来自以下答案和链接的摘要: - 分配任意次数,而绑定后无法重新安装引用。 指针无法指向( NULL ),而引用始终引用一个对象。 没有“引用算术”(但是您可以获取引用指向的对象的地址,并且可以使用引用指向的对象的地址) & obj + 5 )。 澄清一个误解: C ++标准非常小心,以避免编译器必 ..
发布时间:2016-10-11 19:43:33 C/C++开发

什么是复制和交换惯用语?

这个成语是什么,什么时候使用?它解决了哪些问题?当使用C ++ 11时,惯用语是否会改变? 虽然在很多地方都提到过,但我们没有任何奇怪的“什么是”问题和答案,所以这里是。以下是之前提到的地方的部分列表: 复制构造函数和= C ++中的运算符过载:是可能的常见函数吗? 什么是复制elision,以及如何优化复制和交换惯用语 C ++:动态分配对象数组 解决方案 概述 复 ..

在C ++中分割字符串?

在C ++中分割字符串最优雅的方法是什么?字符串可以假定为由以空格分隔的单词组成。 (注意,我对C字符串函数或那种字符操作/访问不感兴趣。 ) 我现在最好的解决方案是: #include #include #include using namespace std; int main() { ..
发布时间:2016-10-11 19:41:21 C/C++开发

什么是对象切片?

有人在IRC中提到它,但google没有很好的答案。 解决方案 “切片”您将派生类的对象分配给基类的实例,从而丢失部分信息 - 其中一些被“切分”。 例如, A类{ int foo; }; class B:public A { int bar; }; 因此, B 类型的对象有两个数据成员 foo 和 bar 。 你写的是: ..
发布时间:2016-10-11 19:41:00 C/C++开发

在C ++标识符中使用下划线有什么规则?

在C ++中,通常使用某种前缀来命名成员变量,表示它们是成员变量,而不是局部变量或参数。如果你来自MFC背景,你可能会使用 m_foo 。我也偶尔看到 myFoo 。 C#(或者可能只是.NET)似乎建议使用下划线,如 _foo 。 解决方案 规则(在C ++ 11中没有改变): 在任何范围内保留,包括用作实现宏: $ b 在全局命名空间中保留: 以下划线开头的标识 ..
发布时间:2016-10-11 19:40:55 C/C++开发

操作符重载

C ++中的操作符重载的基本规则和惯用语是什么? 注意:答案是以特定顺序由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里按照它们最有意义的顺序 的答案索引: C ++中运算符重载的一般语法 C ++中运算符重载的三个基本规则 会员和非会员之间的决定 输入和输出运算符 li> 函数调用操作符 比较运算符 算术运算符 下标 类指针类型的操作符 166157 ..
发布时间:2016-10-11 19:40:46 C/C++开发

为什么是“using namespace std”认为坏做法?

我已经在其他人多次告诉我的老师的建议行使使用命名空间std 在代码是错误的。因此,我们应该使用 std :: cout 和 std :: cin 。 为什么使用命名空间std 被视为不良做法?是真的那么低效或风险声明不明确的变量(变量与 std 命名空间中的函数共享相同的名称)?或者,这是否会影响性能? 解决方案 这与性能无关。但是考虑这样:你使用两个名为Foo和Bar的库: ..
发布时间:2016-10-11 19:40:44 C/C++开发

为什么iostream :: eof在循环条件内被认为是错误的?

我刚刚在这个回答说,在循环条件中使用 iostream :: eof 是”几乎肯定错误“。我通常使用类似 while(cin>> n) - 我猜是隐式检查EOF,为什么使用 iostream显式检查eof: :eof 错了? 与使用 scanf(“...”,...)!= EOF 因为 iostream :: eof c $ c>只会在读取流的结尾之后返回 true 。 请考虑这一点(并 ..
发布时间:2016-10-11 19:40:29 C/C++开发

最终C ++书指南和列表

这个问题试图收集几十个坏的C ++书中每年出版的几个珍珠。 与许多其他编程语言在互联网上找到的教程,几乎没有能够快速拿起C ++,而不学习一本写得很好的C ++书。这是太大和复杂的做这个。事实上,它是如此大和复杂,有很多非常糟糕的C ++书 在那里。我们不是在讨论坏的风格,而是像体育运动这样明显的事实错误,并且 。 请编辑接受的答案,在 之后 提供优质图书 C ++聊天室 。 (如果他 ..
发布时间:2016-10-11 19:39:37 C/C++开发