问题标签 [c++-faq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - basic_ios 上标志的语义
我发现自己反复被这些rdstate()
标志 - good()
, bad()
, eof()
, fail()
- 以及它们是如何用basic_ios::operator!
,operator bool
和表示的operator void*
。
有人可以让我摆脱痛苦并解释这一点,这样我就不必再三思了吗?
c++ - 为什么在打印未初始化的变量时会看到奇怪的值?
在下面的代码中,变量没有初始值并打印了这个变量。
输出:2514932
输出:1.23769e-307
我不明白这些输出数字。谁能给我解释一下?
c++ - std::list::remove 方法是否调用每个已删除元素的析构函数?
我有代码:
该std::list::remove
方法是否调用每个已删除元素的析构函数(和空闲内存)?如果是这样,我该如何避免它?
c++ - 运算符重载的基本规则和习语是什么?
注意:答案是按特定顺序给出的,但由于许多用户根据投票而不是给出时间对答案进行排序,所以这里是答案的索引,按最有意义的顺序排列:
- C++中运算符重载的一般语法
- C++中运算符重载的三个基本规则
- 会员与非会员之间的决定
- 常用运算符重载
- 赋值运算符
- 输入和输出运算符
- 函数调用运算符
- 比较运算符
- 算术运算符
- 数组下标
- 类指针类型的运算符
- 转换运算符
- 重载new和delete
(注意:这是对Stack Overflow 的 C++ FAQ 的一个条目。如果您想批评以这种形式提供 FAQ 的想法,那么开始这一切的 meta 上的帖子就是这样做的地方。该问题在C++ 聊天室中进行监控,FAQ 想法最初是从那里开始的,因此您的答案很可能会被提出该想法的人阅读。)
c++ - 重新加载未定义的行为和序列点
将此主题视为以下主题的续集:
上一部分
未定义的行为和序列点
让我们重温一下这个有趣而复杂的表达方式(斜体词组取自上述主题 *smile* ):
我们说这调用了未定义的行为。我假设当这样说时,我们隐含地假设type ofi
是内置类型之一。
如果类型是i
用户定义的类型怎么办?说它的类型是Index
本文后面定义的类型(见下文)。它还会调用未定义的行为吗?
如果是,为什么?它不等同于写作i.operator+=(i.operator++());
甚至语法上更简单 i.add(i.inc());
吗?或者,他们是否也调用了未定义的行为?
如果没有,为什么不呢?毕竟,对象在连续序列点之间i
被修改了两次。请回忆一下经验法则:一个表达式只能在连续的“序列点”之间修改一个对象的值。如果 i += ++i
是一个表达式,那么它必须调用 undefined-behavior。如果是这样,那么它的等价物i.operator+=(i.operator++());
也 i.add(i.inc());
必须调用 undefined-behavior似乎是不真实的!(据我了解)
或者,i += ++i
不是一个表达式开始吗?如果是这样,那么它是什么,表达的定义是什么?
如果它是一个表达式,同时它的行为也是明确定义的,那么它意味着与表达式关联的序列点的数量在某种程度上取决于表达式中涉及的操作数的类型。我是否正确(甚至部分正确)?
顺便问一下,这个表情怎么样?
您也必须在回复中考虑到这一点(如果您确定知道它的行为)。:-)
是
在 C++03 中定义良好?毕竟是这个,
c++ - 为什么我必须通过 this 指针访问模板基类成员?
如果下面的类不是模板,我可以简单地x
在derived
类中使用。但是,使用下面的代码,我必须使用this->x
. 为什么?
c++ - 如何在 C++ 中使用数组?
C++ 继承了 C 中的数组,它们几乎无处不在。C++ 提供了更易于使用且不易出错的抽象(从std::vector<T>
C++98 和C++11开始),因此对数组的需求不像在 C 中那样频繁出现。但是,当您阅读 legacy代码或与用 C 编写的库进行交互,您应该牢牢掌握数组的工作原理。std::array<T, n>
本常见问题解答分为五个部分:
如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其链接到此处作为附加部分。
在下文中,“array”表示“C 数组”,而不是类模板std::array
。假定具有 C 声明符语法的基本知识。请注意,手动使用new
anddelete
如下所示在遇到异常时非常危险,但这是另一个 FAQ的主题。
(注意:这是对Stack Overflow 的 C++ FAQ 的一个条目。如果您想批评以这种形式提供 FAQ 的想法,那么开始这一切的 meta 上的帖子就是这样做的地方。该问题在C++ 聊天室中进行监控,FAQ 想法最初是从那里开始的,所以你的答案很可能会被提出这个想法的人阅读。)
c++ - 何时使用点、箭头或双冒号来引用 C++ 中的类成员?
从其他 C 派生语言(如 Java 或 C#)到 C++,C++ 具有三种引用类成员的方式一开始非常令人困惑:a::b
、a.b
和a->b
. 我什么时候使用这些运算符中的哪一个?
c++ - C++11 右值和移动语义混淆(return 语句)
我试图理解右值引用并移动 C++11 的语义。
这些示例之间有什么区别,其中哪些不进行矢量复制?
第一个例子
第二个例子
第三个例子
c++ - 有哪些 C++ 智能指针实现可用?
比较、优点、缺点以及何时使用?
这是一个垃圾收集线程的衍生产品,我认为这是一个简单的答案,产生了很多关于一些特定智能指针实现的评论,所以似乎值得开始一篇新文章。
最终的问题是 C++ 中智能指针的各种实现是什么,它们如何比较?只是简单的优点和缺点或例外,以及一些你可能认为应该有效的问题。
我已经发布了一些我已经使用或至少掩盖并考虑用作下面的答案的实现,以及我对它们的差异和相似之处的理解,这可能不是 100% 准确,因此请随时根据需要检查或纠正我的事实。
目标是了解一些新的对象和库,或者纠正我对已经广泛使用的现有实现的使用和理解,并最终为其他人提供体面的参考。