问题标签 [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++ - 在 C++ 中正确使用堆栈和堆?
我已经编程了一段时间,但主要是 Java 和 C#。我从来没有真正需要自己管理内存。我最近开始使用 C++ 进行编程,对于何时应该将内容存储在堆栈中以及何时将它们存储在堆中感到有些困惑。
我的理解是,经常访问的变量应该存放在栈和对象上,很少使用的变量,大数据结构都应该存放在堆上。这是正确的还是我不正确?
c++ - 我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?
typename
在模板中,我必须在哪里以及为什么必须放置template
依赖名称?
究竟什么是从属名称?
我有以下代码:
我遇到的问题是typedef Tail::inUnion<U> dummy
在线。我相当肯定这inUnion
是一个从属名称,VC++ 对此感到窒息是完全正确的。
我也知道我应该能够添加template
某个地方来告诉编译器 inUnion 是一个模板 ID。但具体在哪里?然后它应该假设 inUnion 是一个类模板,即inUnion<U>
命名一个类型而不是一个函数吗?
c++ - 类型名称后的括号是否与 new 不同?
如果'Test'是一个普通的类,有什么区别:
和
c++ - 解决由于类之间的循环依赖而导致的构建错误
我经常发现自己在一个 C++ 项目中面临多个编译/链接器错误,这是由于一些糟糕的设计决策(由其他人做出的 :))导致不同头文件中的 C++ 类之间的循环依赖关系(也可能发生)在同一个文件中)。但幸运的是(?)这种情况发生的频率并不高,让我在下次再次发生时记住这个问题的解决方案。
因此,为了便于将来回忆,我将发布一个具有代表性的问题和解决方案。当然欢迎更好的解决方案。
/li>A.h
/li>B.h
/li>main.cpp
c++ - 为什么'this'是指针而不是引用?
我正在阅读这个问题C++ 利弊的答案,并在阅读评论时遇到了这个疑问。
程序员经常发现“this”是指针而不是引用令人困惑。另一个困惑是为什么“hello”不是 std::string 类型,而是评估为 char const*(指针)(在数组到指针转换之后) – Johannes Schaub - 2008 年 12 月 22 日 1:56
这只表明它没有使用与其他(后来的)语言相同的约定。– le dorfier 2008 年 12 月 22 日 3:35
不过,我将“这个”事情称为一个非常微不足道的问题。哎呀,感谢您在我的未定义行为示例中发现了一些错误。:) 虽然我不明白关于大小的信息与第一个中的任何内容有什么关系。根本不允许指针指向分配的内存之外 – jalf 2008 年 12 月 22 日 4:18
这是一个不断的指针吗?– yesraaj 2008 年 12 月 22 日在 6:35
如果方法是 const int getFoo() const; 这可以是常量 <- 在 getFoo 的范围内,“this”是常量,因此是只读的。这可以防止错误并为调用者提供一定程度的保证,即对象不会更改。– Doug T. 2008 年 12 月 22 日 16:42
你不能重新分配“这个”。即你不能做“this = &other;”,因为这是一个右值。但这是 T* 类型,而不是 T const 类型。即它是一个非常量指针。如果你在一个 const 方法中,那么它是一个指向 const 的指针。常数。但指针本身是非常量的 – Johannes Schaub - 2008 年 12 月 22 日 17:53
像这样想“this”:#define this (this_ + 0) 其中编译器创建“this_”作为指向对象的指针,并使“this”成为关键字。您不能分配“this”,因为 (this_ + 0) 是一个右值。当然不是这样(没有这样的宏),但它可以帮助理解它 – Johannes Schaub - 2008 年 12 月 22 日 17:55
我的问题是,为什么this
指针不是引用?使它成为指针的任何特殊原因?
一些进一步的论点为什么this
作为参考是有意义的:
- 考虑
Item 1
从More Effective C++
:当保证我们有一个有效的对象即不是 NULL 时使用引用(我的解释)。 - 此外,引用被认为比指针更安全(因为我们不能用杂散的指针搞砸内存)。
- 第三,访问引用的语法 (
.
) 比访问指针 (->
或(*)
) 更好更短。
c++ - 指向类数据成员“::*”的指针
我遇到了这个编译得很好的奇怪代码片段:
为什么C++ 有这个指向类的非静态数据成员的指针?这个奇怪的指针在实际代码中有什么用?
c++ - 类的函数声明中最后一个“const”的含义?
在这样的声明中是什么意思const
?让const
我很困惑。
c++ - 返回 C++ 引用变量的做法是邪恶的吗?
我认为这有点主观;我不确定意见是否一致(我已经看到很多返回引用的代码片段)。
根据我刚刚问过的对这个问题的评论,关于初始化引用,返回引用可能是邪恶的,因为[据我了解]它更容易错过删除它,这可能导致内存泄漏。
这让我很担心,因为我已经遵循了一些例子(除非我在想象事情)并且在很多地方都这样做了......我误解了吗?是邪恶的吗?如果是这样,到底有多邪恶?
我觉得由于我的指针和引用混杂在一起,再加上我是 C++ 新手,以及对何时使用什么的完全困惑,我的应用程序一定是内存泄漏地狱......
此外,我了解使用智能/共享指针通常被认为是避免内存泄漏的最佳方法。
c++ - C++ 中循环移位(旋转)操作的最佳实践
左移和右移运算符(<< 和 >>)在 C++ 中已经可用。但是,我不知道如何执行循环移位或旋转操作。
如何执行“向左旋转”和“向右旋转”等操作?
在这里向右旋转两次
应该导致:
一个例子会很有帮助。
(编者注:如果旋转计数为零,或者编译为不只是单个旋转机器指令,那么在 C 中表达旋转的许多常见方式都会遭受未定义的行为。这个问题的答案应该记录最佳实践。)
c++ - 私有继承、公有继承和受保护继承之间的区别
C++
public
中的、private
和protected
继承 有什么区别?
我在 SO 上发现的所有问题都涉及特定案例。