问题标签 [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.

0 投票
2 回答
34330 浏览

c++ - 以下短语在 C++ 中的含义是什么:零初始化、默认初始化和值初始化?

以下短语在 C++ 中的含义是什么:

  • 零初始化,

  • 默认初始化,和

  • 值初始化

C++ 开发人员应该对它们了解什么?

0 投票
13 回答
119615 浏览

c++ - 构造函数中这个奇怪的冒号成员(“:”)语法是什么?

最近我看到了一个类似下面的例子:

这个奇怪的: bar(num)意思是什么?它似乎以某种方式初始化了成员变量,但我以前从未见过这种语法。它看起来像一个函数/构造函数调用,但是对于int? 对我来说没有意义。也许有人可以启发我。而且,顺便说一句,有没有像这样的其他深奥的语言特性,你在普通的 C++ 书中找不到?

0 投票
3 回答
88364 浏览

c++ - C ++中的复制构造函数和=运算符重载:通用函数可能吗?

由于复制构造函数

和 = 运算符重载

具有几乎相同的代码,相同的参数,并且仅在返回上有所不同,是否可以有一个共同的功能供他们使用?

0 投票
7 回答
16036 浏览

c++ - C++ 程序员应该使用哪些 C++ 习语?

C++ 程序员应该知道哪些 C++ 习语?

通过 C++ 习语,我的意思是设计模式或做某些事情的方式仅适用于 C++,或者比大多数其他语言更适用于 C++。

为什么要使用成语,成语有什么作用?

0 投票
2 回答
576 浏览

c++ - 我如何重载“新”运算符以从辅助内存设备分配内存?

我正在寻找一种从辅助内存设备而不是默认堆分配内存的语法。

我该如何实施?默认情况下,使用malloc()会从堆中获取它......当然必须有另一种方式!

0 投票
13 回答
16896 浏览

c++ - C++ 删除 - 它删除了我的对象,但我仍然可以访问数据?

我编写了一个简单的、有效的俄罗斯方块游戏,每个块都作为类单块的实例。

我有一个扫描完整行的函数,并遍历块的链接列表,删除相关的块并重新分配 ->next 指针。

游戏正常运行,块被正确删除,一切正常运行。但是,经过检查,我仍然可以访问已删除数据的随机位。

如果我在删除后打印每个已删除的单块“x”值,其中一些返回随机垃圾(确认删除),其中一些返回 222,告诉我即使调用了析构函数,数据实际上并没有从中删除堆。许多相同的试验表明,没有正确删除的总是相同的特定块。

结果:

是否能够从超出预期的坟墓中访问数据?

对不起,如果这有点啰嗦。

0 投票
8 回答
139432 浏览

c++ - 如何将对象传递给 C++ 中的函数?

我是 C++ 编程的新手,但我有 Java 方面的经验。我需要有关如何将对象传递给 C++ 中的函数的指导。

我是否需要传递指针、引用或非指针和非引用值?我记得在 Java 中没有这样的问题,因为我们只传递了持有对对象的引用的变量。

如果您还可以解释在哪里使用这些选项,那就太好了。

0 投票
1 回答
314 浏览

c++ - 用成员初始化成员

这是我经常遇到的问题。以下示例说明了这一点:

的构造函数的实现C看起来像这样:

由于未定义初始化顺序,m_ObjectA可能在m_ObjectB调用构造函数时未初始化,导致未定义行为。强制某种初始化顺序的一种方法是使成员指针并在构造函数主体中初始化它们,从而强制执行正确的顺序,但这很丑陋,有几个原因。有没有办法使用构造函数的初始化列表强制某个初始化顺序?如果没有,您有任何其他建议如何处理这个问题。

0 投票
15 回答
237159 浏览

c++ - 类成员函数模板可以是虚拟的吗?

我听说 C++ 类成员函数模板不能是虚拟的。这是真的?

如果它们可以是虚拟的,那么使用这种功能的场景示例是什么?

0 投票
9 回答
63182 浏览

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

正如我最近发布的这个答案volatile所示,我似乎对多线程编程上下文中的实用程序(或缺乏实用程序)感到困惑。

我的理解是:任何时候一个变量可能在一段代码访问它的控制流之外被改变,这个变量应该被声明为volatile. 信号处理程序、I/O 寄存器和被另一个线程修改的变量都构成了这种情况。

因此,如果您有一个全局 int foo,并且foo由一个线程读取并由另一个线程以原子方式设置(可能使用适当的机器指令),则读取线程看到这种情况的方式与看到由信号处理程序调整的变量或由外部硬件条件修改,因此foo应该声明volatile(或者,对于多线程情况,使用内存隔离负载访问,这可能是一个更好的解决方案)。

我怎么错了?