c++-faq相关内容

构造函数初始化列表求值顺序

我有一个带有一些参数的构造函数.我曾假设它们是按照列出的顺序构建的,但在一种情况下,它们似乎是反向构建的,导致中止.当我反转参数时,程序停止中止.这是我正在使用的语法示例.问题是,在这种情况下, a_ 需要在 b_ 之前初始化.你能保证施工顺序吗? 例如 A 类{上市:A(OtherClass o, string x, int y) :a_(o), b_(a_, x, y) { }其他类 ..
发布时间:2021-12-18 22:24:37 C/C++开发

为什么我们在 C++ 中实际上需要 Private 或 Protected 继承?

在 C++ 中,我想不出我想从一个继承私有/保护的情况基类: class Base;类派生1:私人基地;类派生2:受保护的基地; 真的有用吗? 解决方案 当您想要访问基类的某些成员,但又不想在类接口中公开它们时,它很有用.私有继承也可以看作是某种组合:C++ faq-lite 给出下面的例子来说明这个语句 class 引擎 {上市:引擎(int numCylinders);无效开始( ..
发布时间:2021-12-17 19:16:05 C/C++开发

C++中的对象销毁

C++ 中的对象究竟何时被销毁,这意味着什么?由于没有垃圾收集器,我是否必须手动销毁它们?异常如何发挥作用? (注意:这是Stack Overflow 的 C++ 常见问题解答的条目.如果您想批评以这种形式提供常见问题解答,然后 开始在元数据上发帖所有这些都可以做到这一点.C++ 聊天室中监控该问题的答案a>,FAQ 的想法最初是从这里开始的,因此您的答案很可能会被提出该想法的人阅读.) ..
发布时间:2021-12-17 16:49:35 C/C++开发

C++ 是否支持“finally"块?(我一直听到的这个“RAII"是什么?)

C++ 是否支持“终于' 块? 什么是RAII 惯用语? C++'s RAII idiom 和 C#'s '有什么区别using'语句? 解决方案 不,C++ 不支持“finally"块.原因是 C++ 转而支持 RAII:“资源获取即初始化"——一个糟糕的名字† 一个真正有用的概念. 这个想法是一个对象的析构函数负责释放资源.当对象具有自动存储持续时间时,对象的析构函数 ..
发布时间:2021-12-17 16:42:23 C/C++开发

什么是模板推导指南,我们应该在什么时候使用它们?

C++17 标准引入了“模板推导指南".我认为它们与此版本标准中引入的构造函数的新模板参数推导有关,但我还没有看到关于它们是什么以及它们的用途的简单的、常见问题解答式的解释. 什么是 C++17 中的模板推导指南? 我们为什么(以及何时)需要它们? 我如何声明它们? 解决方案 模板推导指南是与模板类相关联的模式,它告诉编译器如何将一组构造函数参数(及其类型)转换为类的模板 ..
发布时间:2021-12-13 18:22:52 C/C++开发

从派生**到基础**的转换

我正在阅读 this 不幸的是不明白为什么编译器不允许从 Derived** 转换为 Base**.我也看到了 this 没有给出比 parashift.com 的链接更多的信息. 编辑: 让我们一行一行地分析这段代码: 汽车车;汽车* carPtr = &car;汽车** carPtrPtr = &carPtr;//MyComment: 到现在为止没有问题!车辆** Vehicl ..
发布时间:2021-12-13 13:36:38 C/C++开发

* 和 & 是什么意思?什么时候应用于变量名?

在C++中,有什么区别: void func(MyType&);//宣言//...我的类型 * ptr;功能(*ptr);//编译器不报错功能(ptr);//编译器给出了我认为的错误 &代表内存地址所以//这个语句应该是正确的,因为 ptr 只是一个指针//或一些真实变量的地址. 解决方案 一元前缀运算符 &,应用于对象时, 产生对象的地址:&obj. 类型修饰符&,当应用于即将声明的变 ..
发布时间:2021-12-13 13:08:24 C/C++开发

为什么“this"是指针而不是引用?

我正在阅读这个问题的答案C++ 的优点和缺点 并在阅读评论时产生了这个疑问. 程序员经常发现,“this"和“this"是混淆的.是指针但不是引用.另一个困惑是为什么“你好"不是 std::string 类型,但计算结果为 char const*(指针)(在数组到指针转换之后) – Johannes Schaub - litb 2008 年 12 月 22 日 1:56 这仅表明它不使 ..
发布时间:2021-12-13 12:53:58 C/C++开发

在 C++ 中使用 bool/fail 将字符串转换为 int

我有一个 std::string,它可以是一个字符串,也可以是一个值(例如 0). 将 std::string 转换为具有失败能力的 int 的最佳或最简单的方法是什么?我想要 C# 的 Int32.TryParse 的 C++ 版本. 解决方案 使用 boost::lexical_cast.如果无法完成转换,它将抛出异常. #include #include #include i ..
发布时间:2021-12-12 23:21:14 C/C++开发

如何重载 std::swap()

std::swap() 被许多 std 容器(例如 std::list 和 std::vector)使用排序甚至分配. 但是 swap() 的 std 实现非常通用,对于自定义类型来说效率很低. 因此可以通过使用自定义类型特定实现重载 std::swap() 来提高效率.但是如何实现它才能被 std 容器使用? 解决方案 重载 std::swap 的实现(也就是专门化它)的正确 ..
发布时间:2021-12-08 11:07:58 C/C++开发

函数指针的意义是什么?

我看不到函数指针的效用.我想它在某些情况下可能很有用(毕竟它们存在),但我想不出使用函数指针更好或不可避免的情况. 你能举一些很好地使用函数指针的例子吗(在 C 或 C++ 中)? 解决方案 大多数例子都归结为回调:你调用一个函数 f()code> 传递另一个函数的地址 g(),并且 f() 调用 g() 来执行某些特定任务.如果你把f()的地址传给h(),那么f()会回调h()代码 ..
发布时间:2021-12-02 08:28:25 C/C++开发

定义和声明有什么区别?

两者的含义都让我难以理解. 解决方案 声明 引入标识符并描述其类型,无论是类型、对象还是函数.声明是编译器需要来接受对该标识符的引用.这些是声明: extern int bar;extern int g(int, int);双 f(int, double);//函数声明可以省略 extern类 foo;//类型声明不允许使用 extern 定义 实际上实例化/实现了这个标识符.链接器需 ..
发布时间:2021-12-01 23:34:38 其他开发

你如何在 C++ 中序列化一个对象?

我有一个小的对象层次结构,我需要通过套接字连接序列化和传输这些对象.我需要序列化对象,然后根据它的类型反序列化它.在 C++ 中有没有一种简单的方法可以做到这一点(就像在 Java 中一样)? 是否有 C++ 序列化在线代码示例或教程? 编辑: 明确地说,我正在寻找将对象转换为字节数组,然后再转换回对象的方法.我可以处理套接字传输. 解决方案 谈序列化,boost 序列化 AP ..
发布时间:2021-12-01 15:48:11 C/C++开发

为什么使用'new'会导致内存泄漏?

我首先学习了 C#,现在我开始学习 C++.据我了解,C++ 中的运算符 new 与 C# 中的运算符不同. 您能解释一下示例代码中内存泄漏的原因吗? class A { ... };结构 B { ... };A *object1 = new A();B object2 = *(new B()); 解决方案 发生了什么 当您编写 T t; 时,您正在创建一个 T 类型的对象,自动 ..
发布时间:2021-12-01 15:42:15 C/C++开发

C++中的多态

AFAIK: C++ 提供了三种不同类型的多态性. 虚拟功能 函数名重载 运算符重载 除了以上三种多态之外,还有其他类型的多态: 运行时 编译时 临时多态性 参数多态性 我知道运行时多态可以通过虚拟函数来实现而静态多态可以通过模板函数 来实现 但是对于另外两个 临时多态性 参数多态性网站说, 临时多态性: 如果可以使用的实际类型的范围 ..
发布时间:2021-12-01 15:38:30 C/C++开发

为什么枚举类比普通枚举更受欢迎?

我听说有些人推荐在 C++ 中使用枚举类,因为它们的类型安全. 但这到底是什么意思? 解决方案 C++有两种enum: 枚举类es 普通enums 这里有几个关于如何声明它们的例子: enum class Color { red, green, blue };//枚举类枚举动物{狗,猫,鸟,人};//普通枚举 两者有什么区别? enum classes - ..
发布时间:2021-12-01 15:38:20 C/C++开发

什么是 std::move(),什么时候应该使用?

这是什么? 它有什么作用? 应该什么时候使用? 感谢好的链接. 解决方案 维基百科页面关于 C++11 R 值引用和移动构造函数 在 C++11 中,除了复制构造函数之外,对象还可以有移动构造函数. (除了复制赋值运算符,它们还有移动赋值运算符.) 如果对象具有“右值引用"类型(Type &&),则使用移动构造函数而不是复制构造函数. std::move() 是一个强 ..
发布时间:2021-12-01 15:30:47 C/C++开发

为什么我的包含守卫不阻止递归包含和多个符号定义?

关于包含守卫的两个常见问题: 第一个问题: 为什么不包含保护保护我的头文件免于相互、递归包含?每次我编写类似以下内容时,我都会收到关于不存在的符号的错误,这些错误显然存在甚至更奇怪的语法错误: "a.h" #ifndef A_H#定义A_H#include "b.h"...#endif//A_H "b.h" #ifndef B_H#define B_H#include "a ..
发布时间:2021-12-01 15:29:47 C/C++开发