找到 34423 篇文章,关于编程

段错误在 C++ 中是否确实是未定义行为?

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

383 次浏览

未定义行为是一种赋予实现者(例如编译器或操作系统的实现者)和计算机做任何他们“想做”的事情的自由,换句话说,是不关心后果。发生段错误的情况本质上是暂时的。它们并不总是导致段错误,也可能正常运行(或者至少看起来正常)。例如,考虑以下代码片段 -#include 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 #include #include 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 #include #include #include 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 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 using namespace std; int main(int argc, char** argv) {    cout

C++ 中的常规转换 vs. static_cast vs. dynamic_cast

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

11K+ 次浏览

static_cast - 用于普通/常规类型转换。它也负责隐式类型强制转换,也可以显式调用。您应该在将 float 转换为 int、char 转换为 int 等情况下使用它。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) {    // ... 阅读更多

广告