找到 7345 篇文章 关于 C++

如何在 Linux 上分析运行中的 C++ 代码?

Vrundesha Joshi
更新于 2020年2月11日 10:28:25

881 次浏览

Linux 上有很多用于分析 C++ 程序的优秀分析工具。最广泛使用的工具是 Valgrind。它是一个用于内存调试、内存泄漏检测和分析的编程工具。您可以通过将二进制文件传递给它并将工具设置为 callgrind 来使用 valgrind。首先通过编译程序生成二进制文件:$ g++ -o hello.cpp hello 现在使用 valgrind 进行分析:$ valgrind --tool=callgrind ./hello 这将生成一个名为 callgrind.out.x 的文件。您可以使用名为 kcachegrind 的工具读取此文件。如果您使用的是 gcc,则可以使用内置的分析工具 gprof。您可以 ... 阅读更多

迭代 C/C++ 字符串中的单词的最优雅方法

Arjun Thakur
更新于 2020年2月11日 10:27:10

2K+ 次浏览

没有一种优雅的方法可以迭代 C/C++ 字符串中的单词。对于某些人来说,最易读的方法可以被认为是最优雅的,而对于其他人来说,最有效的方法则被认为是最优雅的。我列出了两种可以用来实现此目的的方法。第一种方法是使用字符串流读取以空格分隔的单词。这有点局限性,但如果您提供适当的检查,则可以很好地完成任务。示例#include #include #include using namespace std; int main() {     string str("Hello from the dark side");     string tmp;         ... 阅读更多

什么是 C++ 或 Java 中的对象切片?

Ankitha Reddy
更新于 2019年7月30日 22:30:21

2K+ 次浏览

对象切片用于描述将派生类对象分配给基类实例的情况。这会导致派生类对象的方法和成员变量丢失。这被称为信息被切掉。例如,class Foo { int a; }; class Bar : public Foo { int b; }; 由于 Bar 扩展了 Foo,因此它现在有两个成员变量 a 和 b。因此,如果您创建了一个 Bar 类型的变量 bar,然后创建 ... 阅读更多

在 C++ 标识符中使用下划线的规则是什么?

Arjun Thakur
更新于 2020年2月11日 10:22:52

2K+ 次浏览

来自 MSDN 文档 - 在标识符开头使用两个连续的下划线字符 ( __ ),或一个前导下划线后跟一个大写字母,在所有作用域中都保留给 C++ 实现。您应该避免对具有文件作用域的名称使用一个前导下划线后跟一个小写字母,因为可能与当前或将来的保留标识符发生冲突。因此,您应该避免使用以下名称:__foo、__FOO、_FOO 并且不应在全局命名空间中使用以下名称:_foo、_bar 除此之外,还有一些其他前缀,如 LC_、SIG_ 和后缀,如 _t ... 阅读更多

可以在 C/C++ 中访问局部变量的内存超出其作用域吗?

Rishi Rathor
更新于 2020年2月11日 10:20:27

146 次浏览

让我们来看一个您可能能够在局部变量的作用域之外访问其内存的示例。示例#include int* foo() {    int x = 3;    return &x; } int main() {    int* address = foo();    cout

为什么使用“using namespace std”被认为是不好的实践?

Abhinaya
更新于 2019年7月30日 22:30:21

397 次浏览

C++ 具有一个标准库,其中包含构建应用程序时使用的常用功能,例如容器、算法等。如果这些库使用的名称公开,例如,如果它们在全局范围内定义了一个队列类,那么您将无法再次使用相同的名称,而不会发生冲突。因此,他们创建了一个命名空间 std 来包含此更改。using namespace 语句只是意味着在其存在的作用域中,使 std 命名空间下的所有内容都可用,而无需在每个内容之前添加 std:: 前缀。虽然这种做法对于示例代码来说是可以的,但将 ... 阅读更多

为什么在循环条件中使用 iostream::eof 被认为是错误的?

Nancy Den
更新于 2020年6月23日 13:40:06

153 次浏览

仅仅因为我们还没有到达 EOF,并不意味着下一次读取会成功。假设您有一个使用 C++ 中的文件流读取的文件。在编写读取文件的循环时,如果您正在检查 stream.eof(),那么您基本上是在检查文件是否已经到达 eof。因此,您将编写如下代码:示例#include #include using namespace std; int main() {    ifstream myFile("myfile.txt");    string x;        while(!myFile.eof()) {       myFile >> x;       // 需要再次检查 x 是否有效或 eof       if(x) { ... 阅读更多

关于 C++,“三法则”是什么?

Govinda Sai
更新于 2020年6月23日 13:40:50

115 次浏览

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

为什么 C++ 模板只能在头文件中实现?

Ramu Prasad
更新于 2020年2月11日 10:14:53

782 次浏览

当您在 C++ 中实例化模板时,编译器会创建一个新类。此类包含您在使用模板参数替换实际参数时放置模板参数的所有位置。例如:template class MyClass {    T foo;    T myMethod(T arg1, T arg2) {       // 实现    } }; 并在您程序中的某个地方使用此类,MyClass x; 编译器在遇到此类情况时,针对您传递的每个类型参数都会创建一个新类。例如,如果您使用不同的模板参数创建了 3 个对象,您将获得 3 个类, ... 阅读更多

如何在 C++ 中开始面向对象编程?

Arjun Thakur
更新于 2020年3月2日 08:09:42

696 次浏览

面向对象编程 (OOP) 是一种基于“对象”概念的编程范式,“对象”可能包含数据(以属性的形式);以及执行操作的指令(以方法的形式)。例如,一个人是一个对象,它具有一些属性,例如身高、性别、年龄等。它还具有一些方法,例如移动、说话等等。对象这是面向对象编程的基本单元。也就是说,数据和对数据进行操作的函数都被捆绑在一个称为对象的单元中。类当您定义一个类时,您定义了一个对象的蓝图。这实际上并不会 ... 阅读更多

广告

© . All rights reserved.