c++-faq相关内容

如何在C++中创建既处理输入又处理输出的流?

我正在尝试创建一个既是输入流又是输出流的类(如std::cout和std::cin)。我试图重载操作符>,但后来我明白了,编写这样的代码并不明智(因为这将是重写C++流的一种方法),而且当像std::basic_iostream、std::basic_ostream、std::basic_istream这样的类在C++标准库中可用时,维护是非常困难的,因为我必须为每种类型重载操作符。因此, ..
发布时间:2022-09-05 16:45:47 C/C++开发

const int*、const int * const 和 int const * 有什么区别?

我总是搞砸如何正确使用 const int*、const int * const 和 int const *.是否有一套规则来定义你能做什么和不能做什么? 我想知道在分配、传递给函数等方面的所有注意事项. 解决方案 向后阅读(由 顺时针/螺旋规则): int* - 指向 int 的指针 int const * - 指向 const int 的指针 int * const - ..
发布时间:2022-01-31 09:22:05 C/C++开发

为什么使用“新"会导致内存泄漏?

我先学了 C#,现在我开始学习 C++.据我了解,C++ 中的运算符 new 与 C# 中的运算符不同. 你能解释一下这个示例代码中内存泄漏的原因吗? A 类 { ... };结构 B { ... };A *object1 = new A();B 对象2 = *(新 B()); 解决方案 发生了什么 当您编写 T t; 时,您正在创建具有 自动存储持续时间 的 T 类型的对象.超 ..
发布时间:2022-01-30 16:47:56 C/C++开发

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

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

什么是T&&(双与号)在 C++11 中是什么意思?

我一直在研究 C++11 的一些新特性,我注意到其中一个是声明变量时的双 & 符号,例如 T&&变量. 首先,这个野兽叫什么?我希望 Google 允许我们搜索这样的标点符号. 具体是什么意思? 乍一看,它似乎是一个双重引用(就像 C 风格的双指针 T** var),但我很难考虑它的用例. 解决方案 它声明了一个 右值参考(标准提案文档). 这里是rvalue的介绍 ..
发布时间:2022-01-30 16:31:48 C/C++开发

派生类中具有相同名称但不同签名的函数

我有一个同名的函数,但在基类和派生类中具有不同的签名.当我尝试在从派生继承的另一个类中使用基类的函数时,我收到一个错误.见以下代码: A 类{上市:无效 foo(字符串 s){};};B类:公共A{上市:int foo(int i){};};C类:公共B{上市:空栏(){字符串 s;富(S);}}; 我从 gcc 编译器收到以下错误: 在成员函数 `void C::bar()' 中:没有匹配 ..
发布时间:2022-01-30 16:29:12 C/C++开发

如何在现代 C++ 中实现经典排序算法?

C++ 标准库中的 std::sort 算法(及其表亲 std::partial_sort 和 std::nth_element)是在大多数实现中更基本的排序算法的复杂和混合合并,例如选择排序、插入排序、快速排序、合并排序或堆排序. 这里和姐妹网站上有很多问题,例如 https://codereview.stackexchange.com/ 与错误、复杂性有关以及这些经典排序算法实现的其他方 ..
发布时间:2022-01-30 16:15:12 C/C++开发

为什么 volatile 在多线程 C 或 C++ 编程中没有用?

正如我最近发布的这个答案中所示,我似乎对 volatile 在多线程编程上下文中的实用性(或缺乏实用性)感到困惑. 我的理解是:任何时候一个变量可能在一段代码访问它的控制流之外被改变,这个变量应该被声明为volatile.信号处理程序、I/O寄存器、被另一个线程修改的变量都构成了这种情况. 因此,如果您有一个全局 int foo,并且 foo 由一个线程读取并由另一个线程以原子方式设置 ..
发布时间:2022-01-30 16:09:11 C/C++开发

“好像"究竟是什么?规则?

正如标题所说: 究竟什么是“as-if"规则? 一个典型的答案是: 允许任何和所有不改变程序可观察行为的代码转换的规则 有时,我们会不断从某些实现中获取行为,这些行为归因于该规则.多次出错. 那么,这条规则到底是什么?标准并没有明确将这条规则作为一个部分或段落提及,那么究竟什么属于该规则的范围? 对我来说,这似乎是一个标准没有详细定义的灰色区域.有人可以详细说明 ..
发布时间:2022-01-30 15:59:33 C/C++开发

C ++中的结构和类有什么区别?

这个问题已经在 C#/.Net 的上下文中提出. 现在我想了解 C++ 中结构和类之间的区别.请讨论技术差异以及在 OO 设计中选择其中一种的原因. 我将从一个明显的区别开始: 如果不指定public: 或private:,则结构的成员默认为public;默认情况下,类的成员是私有的. 我确信在 C++ 规范的晦涩角落中还有其他差异. 解决方案 你忘记了类和结构之间 ..
发布时间:2022-01-30 15:58:54 C/C++开发

为什么 C++ 程序员应该尽量减少“新"的使用?

我偶然发现 Stack Overflow 问题 使用 std::list 时 std::string 的内存泄漏,其中一条评论这样说: 停止使用 new 这么多.我看不出你在任何地方使用 new 的任何原因你做到了.您可以在 C++ 中按值创建对象,它是其中之一使用该语言的巨大优势. 您不必分配一切都在堆上. 不要像 Java 程序员那样思考. 我不太确定 ..
发布时间:2022-01-30 15:52:35 C/C++开发

什么是复制和交换成语?

这个成语是什么,应该在什么时候使用?它解决了哪些问题?使用 C++11 时习语会发生变化吗? 虽然在很多地方都提到过,但我们没有任何单数的“它是什么"问题和答案,所以在这里.以下是之前提到的部分地点列表: 你最喜欢的 C++ 编码风格成语是什么:复制交换 复制C++ 中的构造函数和 = 运算符重载:通用函数是否可行? 什么是复制省略和它如何优化复制和交换习语 C++:动态分配对象 ..

我必须在哪里以及为什么要放置“模板"?和“类型名称"关键词?

在模板中,我必须在何处以及为什么必须将 typename 和 template 放在依赖名称上? 究竟什么是从属名称? 我有以下代码: 模板//Tail 也将是一个 UnionNode.结构联合节点:公共尾巴{//...模板结构联合{//Q: 在哪里添加类型名/模板?typedef Tail::inUnion假;};模板 我遇到的问题在于 typedef Tail::in ..
发布时间:2022-01-30 15:46:06 C/C++开发

运算符重载的基本规则和习语是什么?

注意:答案是按特定顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,这里有一个 答案按最有意义的顺序排列: C++ 中运算符重载的一般语法 C++中运算符重载的三个基本规则 会员与非会员之间的决定 常用运算符重载 赋值运算符 输入和输出运算符 函数调用运算符 比较运算符 算术运算符 数组下标 类指针类型的运算符 转换运算符 重载new和delete ..
发布时间:2022-01-30 15:45:52 C/C++开发

C++中的多态性

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

类的函数声明中最后一个“const"的含义?

const 在这样的声明中是什么意思?const 让我很困惑. 类 foobar{上市:运算符 int () 常量;const char* foo() const;}; 解决方案 当你将 const 关键字添加到方法时,this 指针本质上将变成指向 const 对象,因此您不能更改任何成员数据.(除非你使用 mutable,稍后会详细介绍). const 关键字是函数签名的一部分,这 ..
发布时间:2022-01-23 22:59:15 C/C++开发

在 C++11 中更改了默认初始化的含义?

C++2003 8.5/5 说: 默认初始化一个 T 类型的对象意味着: ——如果 T 是非 POD 类类型(第 9 条),则调用 T 的默认构造函数(初始化为如果 T 没有可访问的默认构造函数,则格式错误); ——如果 T 是一个数组类型,每个元素都是默认初始化的; ——否则,对象被零初始化. [强调添加.] C++2011 标准将最后一项更改为 —否则 ..
发布时间:2022-01-18 23:39:29 C/C++开发