十万个为什么
朱星玄
这个作者很懒,什么都没留下…
展开
-
【为什么】指针,动态内存的例子
#include <stdio.h>int *pPointer;void SomeFunction();{ int nNumber; nNumber = 25; // make pPointer point to nNumber: pPointer = &nNumber;}void main(){ SomeF...原创 2023-02-18 11:25:00 · 54 阅读 · 0 评论 -
【为什么】使用数组的指针
您还可以创建指向数组的指针,这是按如下方式完成的int *pArray;pArray = new int[6];这将创建一个指针,pArray,并使其指向一个包含六个元素的数组。另一种不使用动态内存分配的方法如下:int *pArray;int MyArray[6];pArray = &MyArray[0];请注意,您可以简单地编写 MyArray 而不是编写 &My...原创 2023-02-18 12:21:00 · 58 阅读 · 0 评论 -
【为什么】引用和指针
在C++中,&符号有几种不同的含义,取决于上下文。如果&是引用操作的话,它可以创建一个别名或替代名称来引用另一个变量。例如:int myNumber = 10; int& Number = myNumber; // Number is a reference to myNumber Number = 25; // This changes both Number a...原创 2023-02-18 12:37:00 · 53 阅读 · 0 评论 -
【为什么】构造函数中可以调用虚函数吗?
class Base{public: Base() { Fuction(); } virtual void Fuction() { cout << "Base::Fuction" << endl; }};class A : public Base{public: A() { Fuction(); } virtual voi...原创 2023-02-23 16:54:00 · 66 阅读 · 0 评论 -
【为什么】C++中的宏
C++宏的简单理解C++中的宏是一种代码片段,可以被宏的值所替换。宏是用#define指令来定义的,用#undef指令来取消定义。宏有两种类型:类对象宏和类函数宏。类对象宏就像一个常量,只不过不需要分配内存空间。类函数宏就像一个函数,只不过不需要调用和返回。大白话来说,宏就是一种让你写代码时更方便、更简洁、更灵活的工具举例说明假设你想定义一个宏,用来计算两个数的最大值。你可以这样写:...原创 2023-03-24 10:15:00 · 1399 阅读 · 0 评论 -
【为什么】选用int64_t而不是longlong
int64_t 是 C++ 中的一种整型数据类型,占用 8 个字节(64 位),可以存储的整数范围是从 -9223372036854775808 到 9223372036854775807。它是一种固定长度的数据类型,可以保证在不同的平台上都有相同的位数和取值范围,适用于需要存储大整数的场合。在某些系统中,也可以用 long long int 代替 int64_t。使用 long long 存...原创 2023-03-24 15:24:00 · 2077 阅读 · 0 评论 -
【为什么】C++ 中需要运算符重载
运算符重载的主要目的是为了方便程序员使用自定义类型。在某些情况下,C++的内置类型可能无法满足程序的需要,需要使用自定义类型。在这种情况下,合适的操作符重载可以使自定义类型的操作像内置类型一样自然。运算符重载的另一个目的是提高代码的可读性和可维护性。操作符重载允许我们在代码中使用一些符号,帮助我们表达代码的目的,而无需使用冗长的函数名称。此外,C++标准库提供了许多用于处理自定义类型的函数和...原创 2023-03-24 15:37:00 · 703 阅读 · 0 评论 -
【为什么】override关键字表示该函数会覆盖基类中的虚函数
override关键字表示该函数会覆盖基类中的虚函数,即在派生类中重新实现了基类中的同名虚函数。在C++中,派生类可以重载其父类的虚函数。使用override关键字可以很好地指出该函数是目标函数,因为当以下情况出现时,使用override关键字会在编译时帮助我们检查错误:如果父类中没有具有相同签名的虚函数,则会发生编译错误。如果函数签名参数与基类中的虚函数不匹配,则会发生编译错误。如果该...原创 2023-03-24 16:00:00 · 177 阅读 · 0 评论 -
【为什么】在大型项目中为什么不能用using namespace std;
在大型项目中,使用using namespace std;会存在以下几个问题:命名冲突:使用using namespace std;会将所有std命名空间下的名称都引入当前命名空间,可能会与当前项目中的其他标识符冲突,导致编译错误。可读性差:如果在项目中使用大量的命名空间,代码可能会变得难以阅读和理解,因为不知道哪个标识符映射到哪个命名空间。可维护性差:在大型项目中,多人协作开...原创 2023-03-24 16:28:00 · 531 阅读 · 0 评论 -
【为什么】C++中的#pragma once是干什么,和#include guard区别
一.#pragma once是C和C++编程语言中的一个非标准但广泛支持的预处理指令,用于使当前源文件在单次编译中只被包含一次。它与#include guards有相同的作用,但有一些优点,如:代码更少,避免名称冲突,有时可以提高编译速度代码例子:// Foo.h #pragma once class Foo { };这个指令告诉编译器只包含一次Foo.h文件,不管它被导入了多少...原创 2023-03-24 09:26:00 · 2351 阅读 · 0 评论 -
【为什么】我可以从构造函数中调用虚函数吗?C++之父谈
是的,但要小心。 它可能不会做你期望的。 在构造函数中, 虚拟调用机制被禁用,因为从派生覆盖 课程还没有发生。 对象是从基础向上构建的, “派生前的基础”。考虑到#include<string> #include<iostream> using namespace std; class B { public: B(const string& ss...原创 2023-02-23 16:50:00 · 120 阅读 · 0 评论 -
【为什么】什么是纯虚函数?C++之父谈
纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如:class Base { public: void f1(); // 不是虚函数 vi...原创 2023-02-19 23:39:00 · 216 阅读 · 0 评论 -
【为什么】有什么区别 new 和 malloc() ?C++之父谈
malloc() 是一个以数字(字节)作为参数的函数; 它返回一个 void* 指向单元化存储。 new 是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项 作为它的论点; 它返回一个指向其类型的(可选)初始化对象的指针。 当您要分配用户定义类型的对象时,差异最为明显 具有独特的初始化语义。 例子: class Circle : public Shape { pub...原创 2023-02-17 22:42:00 · 61 阅读 · 0 评论 -
【为什么】我应该使用按值调用还是按引用调用?C++之父谈
我不知道一个强有力的逻辑原因。如果传递“不是一个对象”(例如空指针)是可以接受的,那么使用指针是有意义的。当我想修改一个对象时,我的个人风格是使用指针,因为在某些情况下,这样更容易发现修改是可能的。所以,我更喜欢返回一个新的值而不是修改原来的值,只要新创建的值的创造和复制并不昂贵。另请注意,成员函数的调用本质上是对对象的按引用调用,因此当我们想要修改对象的值/状态时,我们经常使用成员函数。好吧,我们通常不得不这样做,但通常我们有另一种选择:产生新的值。我确实想更改参数,我应该使用指针还是应该使用引用?原创 2023-02-17 20:58:00 · 61 阅读 · 0 评论 -
【为什么】C++既有指针又有引用?C++之父谈
更一般地说,如果你想同时拥有指针的功能和引用的功能,你需要两种不同的类型(如在 C++ 中)或对一种类型的两组不同的操作。例如,对于单一类型,您既需要分配给所引用对象的操作,也需要分配给引用/指针的操作。这可以使用单独的运算符来完成(如在 Simula 中)。C++ 从 C 继承了指针,所以我不能在不导致严重的兼容性问题的情况下删除它们。引用在很多方面都很有用,但我在 C++ 中引入它们的直接原因是为了支持运算符重载。或者,您可以依赖类型检查(重载)。此文为C++之父撰写,本篇为翻译。原创 2023-02-17 20:47:00 · 142 阅读 · 0 评论 -
【为什么】默认情况下析构函数不是虚拟的
因为很多类并不是设计来作为基类使用的, 虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)原创 2023-02-17 20:24:00 · 76 阅读 · 0 评论 -
【为什么】_stprintf_s,TCHAR,_T
在 Visual C++ 中,字符串可以用 8 位 ANSI 标准或 16 位 Unicode 表示。函数的第一个参数是要格式化的字符串,第二个参数是要插入到字符串中的值。宏可以保证从 ASCII 编码类型转换到 Unicode 编码类型的时候,程序不需要修改。,这是一种 Windows API 中使用的数据类型,它可以根据编译器设置自动转换为。是两个字节(16 位)或四个字节(32 位)长,具体取决于编译器和操作系统。都是 C++ 中的字符类型,但它们之间有一些区别。,则所有字符串都将是 ANSI。原创 2023-04-04 16:34:09 · 957 阅读 · 0 评论