找到 34423 篇文章,关于编程

段错误在 C++ 中是真正的未定义行为吗?

Arjun Thakur
更新于 2020-06-24 06:08:41

383 次浏览

未定义行为是一种赋予实现者(例如编译器或操作系统)和计算机自由的方式,让他们做任何他们“想要”的事情,换句话说,是不关心后果的。发生段错误的情况是短暂的。它们不会总是导致段错误,但也可能正确运行(或者至少看起来如此)。例如,考虑以下代码片段:#include <stdio.h> int main() {     int arr[2];     arr[0] = 0;     arr[1] = 1;     arr[2] = 2; // 未定义行为     arr[3] = 3; // 未定义行为 ... 阅读更多

使用 C++ STL 对自定义对象向量进行排序

Ankith Reddy
更新于 2020-02-12 06:19:23

12K+ 次浏览

您可以使用 C++ STL 函数 std::sort 对自定义对象向量进行排序。sort 函数有一个重载形式,它接受 first、last 和 comparator 作为参数。first 和 last 是容器中第一和最后一个元素的迭代器。comparator 是一个谓词函数,可用于指示如何对容器进行排序。例如 #include <algorithm> #include <vector> #include <string> using namespace std; struct MyStruct {    int key;    string data;    MyStruct(int key, string data) {       this->key = key;       this->data = data;    } }; int ... 阅读更多

如何使用 POSIX 在 C++ 中执行命令并获取命令的输出?

Abhinanda Shri
更新于 2020-02-12 06:15:52

12K+ 次浏览

您可以使用 popen 和 pclose 函数来对进程进行管道传输。popen() 函数通过创建管道、分叉和调用 shell 来打开一个进程。我们可以使用缓冲区来读取 stdout 的内容并将其不断追加到结果字符串中,并在进程退出时返回此字符串。例如 #include <stdio.h> #include <stdlib.h> #include <string> #include <iostream> using namespace std; string exec(string command) {    char buffer[128];    string result = "";    // 打开指向文件的管道    FILE* pipe = popen(command.c_str(), "r");    if (!pipe) {       ... 阅读更多

为什么不能在 C/C++ 的 switch 语句中声明变量?

George John
更新于 2020-01-27 12:30:17

895 次浏览

可以在 switch 语句中声明变量。您只需要在 switch 语句中声明它们并在新的作用域内使用它们即可。例如,示例 #include <iostream> using namespace std; int main() {    int i = 10;    switch(i) {       case 2:       //一些代码       break;       case 10:{          int x = 13;          cout

C++ 中'struct'和'typedef struct'的区别?

Ankith Reddy
更新于 2019-07-30 22:30:22

817 次浏览

在 C++ 中,'struct' 和 'typedef struct' 之间没有区别,因为在 C++ 中,所有 struct/union/enum/class 声明的行为都像它们被隐式 typedef 了,只要名称没有被另一个同名声明隐藏即可。不过有一个细微的区别,就是 typedef 不能进行前向声明。因此,对于 typedef 选项,您必须在任何地方使用它之前包含包含 typedef 的文件。

为什么我们应该避免在 C/C++ 中使用全局变量?

Ankitha Reddy
更新于 2020-06-24 06:10:51

4K+ 次浏览

我们应该避免在任何语言中使用全局变量,而不仅仅是 C++。这是因为这些变量会污染全局命名空间,在大型项目中可能会导致一些非常严重的错误,因为它们可以从任何文件中访问,因此可以从任何地方修改。以下是一些全局变量被认为不好的原因:全局变量可以被代码的任何部分修改,这使得难以记住或推断每个可能的用法。全局变量可能没有任何访问控制。它不能限制在程序的某些部分。使用全局变量会导致非常... 阅读更多

C++ 中的前向声明是什么?

Abhinaya
更新于 2020-02-12 06:14:19

414 次浏览

前向声明让代码知道存在名为 Person 的类。当编译器看到这些名称的使用时,这就可以满足编译器的需求。稍后,链接器将找到类的定义。例如 Class Person; void myFunc(Person p1) {    // ... } Class Person {    // 类的定义在此 };所以在这种情况下,当编译器遇到 myFunc 时,它会知道在代码的某个地方会遇到这个类。这可以用于类使用代码放置/包含在包含类定义的代码之前的情况。

在 C/C++ 中 int argc, char *argv[] 是什么意思?

Chandu yadav
更新于 2020-06-24 06:12:03

7K+ 次浏览

argc 代表参数计数,argv 代表参数值。这些是 main 函数开始执行时传递给它的变量。当我们运行程序时,我们可以向该程序提供参数,例如:$ ./a.out hello 例子 这里 hello 是可执行文件的参数。这可以在您的程序中访问。例如:#include <iostream> using namespace std; int main(int argc, char** argv) {    cout

C++ 中的常规转换、static_cast 和 dynamic_cast

George John
更新于 2020-06-24 06:13:58

11K+ 次浏览

static_cast - 这用于正常的/普通的类型转换。这也是负责隐式类型强制转换的转换,也可以显式调用。在将浮点数转换为整数、字符转换为整数等情况下,您应该使用它。dynamic_cast - 此转换用于处理多态性。只有在转换为派生类时才需要使用它。这专门用于在从基类转换为派生类时继承。常规转换 - 这是 C++ 中最强大的转换,因为它结合了 const_cast、static_cast 和 reinterpret_cast。但它也不安全... 阅读更多

将二维数组传递给 C++ 函数

Govinda Sai
更新于 2023-09-06 13:28:22

44K+ 次浏览

C++ 不允许将整个数组作为参数传递给函数。但是,您可以通过指定数组的名称而不带索引来传递指向数组的指针。有三种方法可以将二维数组传递给函数:指定二维数组的列数 void processArr(int a[][10]) {    // 执行某些操作 }传递包含指针的数组 void processArr(int *a[10]) {    // 执行某些操作 } // 调用时 int *array[10]; for(int i = 0; i < 10; i++)    array[i] = new int[10]; processArr(array);传递指向指针的指针 void processArr(int **a) {    // ... 阅读更多

广告