找到 7345 篇文章 关于 C++

-std = c++11 和 -std = gnu++11 之间的区别是什么?

George John
更新于 2020年6月24日 05:45:45

1K+ 次浏览

GNU C++ 编译器 g++ 为 C++ 语言提供了扩展。这两个选项之间的区别在于是否启用这些可能违反 C++ 标准的 GNU 扩展。请注意,即使使用 -std = c++11,某些扩展仍然可能有效,前提是它们不违反标准。GNU 编译器中 C++ 语言扩展的列表可以在这里找到:https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html

C++0x 和 C++11 之间的区别是什么?

Nishtha Thakur
更新于 2019年7月30日 22:30:22

350 次浏览

C++ 和 C 标准通常以其发布年份命名。例如,在 C++ 中,原始标准于 1998 年发布,因此称为 C++98,其于 2003 年发布的第一个修正版称为 C++03。对于下一个修订版,预计下一个标准将在 2008 年完成,但由于不确定,它被命名为 C++0x,其中 x 代表 8 或 9。尽管计划有所改变,但现在它被称为 C++11。因此,C++0x 是该标准发布前的名称。一旦它在…… 阅读更多

C++ 中“就地 new”的用途是什么?

Abhinanda Shri
更新于 2020年6月24日 05:46:44

284 次浏览

简而言之,“就地 new”允许您在已分配给给定变量的内存上“构造”一个对象。这对于优化很有用,因为它比重新分配和重用已分配给它的相同内存更快。它可以按如下方式使用:new (address) (type) initializer 我们可以指定我们想要构造给定类型的新的对象的地址。示例 #include using namespace std; int main() { int a = 5; cout

C++ vs C++0x vs C++11 vs C++98

Smita Kapse
更新于 2020年2月11日 11:15:38

2K+ 次浏览

C++98 是 C++ 标准的第一个版本。它定义了所有基本的语言结构、STL 和标准库。C++03 是对此标准的下一个修订版。这主要被认为是标准的错误修复,因为它修正了 92 个核心语言缺陷报告、125 个库缺陷报告,并且只包含一个新的语言特性:值初始化。C++0x 是预期在 2008-09 年完成但最终在 2011 年完成的进行中工作的名称。C++11 是 2011 年发布的现代 C++ 标准。这为现有的语言带来了许多主要的扩展和改进。…… 阅读更多

C++11 中的“五法则”是什么?

Chandu yadav
更新于 2020年6月24日 05:50:29

596 次浏览

五法则应用于 C++ 的资源管理。资源管理使客户端无需担心受管理对象的生存期,从而潜在地消除 C++ 代码中的内存泄漏和其他问题。但是这种管理是有代价的。“五大法则”指出,如果您必须编写以下函数中的一个,那么您必须对所有这些函数都有一个策略。如果我们有一个对象 Foo,那么我们可以有一个 FooManager 来处理资源 Foo。在实现 FooManager 时,您可能都需要以下…… 阅读更多

C++ 中的三法则与五法则?

George John
更新于 2020年6月24日 05:51:52

445 次浏览

三法则是在使用 C++ 时的一条经验法则。这是一种良好的实践规则,它指出:如果您的类需要显式定义复制构造函数、赋值运算符或析构函数中的任何一个,那么它很可能需要这三个中的所有三个。为什么是这样?因为,如果您的类需要上述任何一个,它正在管理动态分配的资源,并且可能需要另一个来成功实现这一点。例如,如果您需要一个赋值运算符,您将创建当前正在通过引用复制的对象的副本,因此分配…… 阅读更多

为什么变长数组不是 C++ 标准的一部分?

Abhinaya
更新于 2020年6月24日 05:52:35

415 次浏览

必须在通常只有少量可用空间的堆栈上创建一个潜在的大数组,这不好。如果您事先知道大小,可以使用静态数组。如果您事先不知道大小,您将编写不安全的代码。变长数组不能原生包含在 C++ 中,因为它们需要对类型系统进行巨大的更改。C++ STL 中提供了变长数组的替代方案,即向量。您可以像这样使用它:示例 #include #include using namespace std; int main() { vector vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); …… 阅读更多

如何使用 new 在 C++ 中声明二维数组?

Chandu yadav
更新于 2020年2月11日 11:07:10

2K+ 次浏览

动态二维数组基本上是指向数组的指针数组。因此,您首先需要初始化指向指针的指针数组,然后在循环中初始化每个一维数组。示例 #include using namespace std; int main() { int rows = 3, cols = 4; int** arr = new int*[rows]; for(int i = 0; i < rows; ++i) arr[i] = new int[cols]; return 0; } 这将创建一个大小为 3x4 的二维数组。在这种情况下要小心清除内存,因为您需要删除…… 阅读更多

#include和 #include "filename" 在 C/C++ 中的区别?

Anvi Jain
更新于 2019年7月30日 22:30:22

3K+ 次浏览

这两种形式的区别在于预处理器搜索要包含的文件的位置。#include 预处理器以实现依赖的方式进行搜索,它搜索编译器预先指定的目录。此方法通常用于包含标准库头文件。#include "filename" 预处理器在包含指令所在的同一目录中搜索。如果失败,则它开始表现得像 #include 形式。此方法通常用于包含您自己的头文件。

何时在 C++ 中使用虚析构函数?

Govinda Sai
更新于 2020年2月11日 11:05:48

735 次浏览

Scott Meyers 在 Effective C++ 中说:如果一个类有任何虚函数,它应该有一个虚析构函数,并且那些不是设计为基类或不是设计为多态使用的类不应该声明虚析构函数。因此,您应该在多态基类中声明虚析构函数。这是因为如果您使用派生构造函数创建基类的对象:Base *b = new Derived(); // 使用 b delete b; 如果 Base 的析构函数不是虚函数,则在这种情况下 delete b 的行为未定义。对析构函数的调用将像任何非虚代码一样解析。…… 阅读更多

714 715 716 (735)
广告
© . All rights reserved.