自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 记在一次C++循环依赖问题中偶然发现的解决方法

尽管在log.h中有了Mutex类型的前置声明,log.h认识了Mutex类,然而用Mutex类型来定义变量却会报错“不允许使用不完整的类型”,这是由于对于类而言前置声明没有类的定义(Mutex类定义在源文件里面,log.h还不认识),因此类是不完整的,Mutex类只能用于定义指针、引用、或者用于函数形参的指针和引用,不能用来定义对象,或访问类的成员。在我的这个例子中,log.h表示“Mutex不是类型”,而thread.h则表示“LogSpace不是名称空间名”。

2024-04-20 12:19:03 380 1

原创 关于C++类内部公有静态变量成员在源文件中声明方法的发现

如果在log.cpp中不使用Logger::指明 Default_LoggerName是Logger类成员并使用了static关键字,这句代码本身并不会报错,但会使得Default_LoggerName变成了log.cpp的一个全局变量,而不是Logger类的静态成员。而该变量的初始化应在实现该类的源文件(log.cpp)而不是头文件(log.h)中进行,这是因为如果在头文件中初始化静态成员变量,那么当头文件被多个源文件包含时,就会导致静态成员变量被多次初始化,从而引发编译错误。

2024-04-14 00:14:27 123 1

原创 C++关于stringstream类对象调用类方法清空内容的问题

其中ss.str("")和ss.clear()功能不是重复的,前者是用来清空。对象的一些状态标志(例如错误标志和eof标志)可能会被设置,在读取或写入操作失败后,可以清除这些状态标志,使得。对象可以被重新使用。

2024-04-13 22:04:47 247

原创 C++用cout以十六进制输出从socket中读取到的MAC地址的方法

这是因为当我们使用cout输出一个unsigned char变量时,cout会默认将其视为一个字符,而不是一个数字。也就是说,它会尝试将这个unsigned char变量解释为ASCII码,并输出对应的字符。然而,我们希望输出的是这个变量所代表的十六进制数值,而不是对应的字符,故应当将其转换为int或unsigned int。值得一提的是,std::hex和std::setfill都能影响后续所有的整数输出,而std::setw只能影响紧随其后的下一个输出。

2024-03-12 18:40:15 404 1

原创 关于Linux系统设置静态IP地址后无法上网的一种可能原因

需要注意的是,其他文章中通过修改/etc/sysconfig/network-scripts/ifcfg-eth0以配置静态IP地址的方法不适用于Ubuntu,因为Ubuntu中没有/sysconfig目录。要将Linux系统作为服务器主机最好将其IP地址设置为静态,这样即便改变地理位置也不会致使服务器的IP地址发生改变。

2024-03-11 18:35:51 640 1

原创 关于C与C++中unsigned char*和char*之间转换的差别

【代码】关于C与C++中unsigned char*和char*之间转换的差别。

2024-03-10 20:09:13 1399 1

原创 C++使用名称空间中声明的变量代替外部全局变量的一种方法

可以发现,使用名称空间的情况下定义和声明的作用域也应相同(即在该名称空间内),而b.cpp在获得XSpace许可之前也无法使用变量x,体现了该指导原则的保护作用。在声明extern变量之后一定要对变量进行定义,并且定义和声明的作用域要相同,否则也会导致链接出错。

2024-02-23 17:36:48 376

原创 关于C++结构体名称与函数名称相同时声明结构体变量不可省略struct关键字的发现

众所周知,C++中在声明结构体变量时可以省略struct关键字,而在结构体名称与变量名称相同时会产生歧义,此时则不能省略struct关键字。

2024-02-20 21:08:29 412 1

原创 关于在Linux系统下客户端和服务器端交流时网络连接断开后,客户端尝试用connect()函数重连前必须重新设置socket的发现

【代码】关于在Linux系统下客户端和服务器端交流时网络连接断开后,客户端尝试用connect()函数重连前必须重新设置socket的发现。

2024-02-06 16:45:58 382

原创 关于在Linux系统下客户端和服务器端交流时网络连接断开后,C++ read()和write()的一些性质的发现

2.在服务器端主动关闭socket后,客户端使用read()函数的将无法正确读取到服务器端发送的数据,而这种情况下read()函数将会返回0(而不是-1?)并且不报错,而仅在出现错误(?)时才会返回-1……1.在服务器端主动关闭socket后,客户端使用write()函数的写入仍能完成,并且write()函数能够正常返回成功写入的字节数;暂时未查明相关原因。

2024-02-06 16:26:17 413

原创 Linux系统下用命令行参数传递C++ string类字符串时可能出现的问题

个人猜测是直接将命令行输入的参数作为string数组类型输入可能存在终止符丢失的情况,而将其转化为char*类型或是直接用char*[ ]作为输入参数则能够避免这一问题,具体原因暂时不得而知。用printf()代替cout打印const char*的字符串也能得到正确结果。输出结果会额外打印了一些其他信息(疑似字符串结尾的‘\0’出问题了?

2024-02-04 17:52:06 430 1

原创 关于使用Telnet对linux服务器的访问是否会被拒绝与服务器端用户、客户端用户是否为管理员之间的关系的发现

3.无论客户端用户是否为管理员,都不会对连接是否会被拒绝造成影响。箇中缘由暂时不得而知。

2024-02-03 18:41:44 393 1

原创 Visual Studio C语言逆天bug,提供莫名其妙的fabs()函数

在vs code上使用gcc进行编译时会对在没有包含math.h的情况下使用fabs()函数的代码报错,故认为这是Visual Studio自身的bug。

2023-09-23 20:14:43 303 2

原创 关于C++使用可变参数模板递归时的基线条件与一般情况的顺序问题

在用递归的方式使用可变参数模板时,应当将基线条件(即只接受一个参数的条件)的代码放在一般情况的前面,否则在递归进行到调用只剩一个实参的函数时会由于先遇到一般情况而报错。

2023-09-01 22:13:17 42 1

原创 关于C++同时使用两个fstream对象打开同一个文件

使用两个文件流同时打开同一个文件,即通过不同的流对象读取正在编写的同一文件,其实际结果是由实现定义的。最终尚未阅读的文件部分可能会被覆盖,从而破坏输入。因而应当尽可能地保证每个被打开的文件同一时间仅关联了一个文件流,以免出现读取混乱的情况。

2023-08-28 17:10:47 250 1

原创 关于C++ STL的unique()函数和sort()函数

在使用unique()函数之前一般需要先用sort()函数对容器进行排序,否则无法达到去重的效果,原因暂时未知,可能与unique()方法的实现方式有关。

2023-08-28 17:04:29 140 1

原创 关于C++的random_shuffle()函数与shuffle()函数

std::random_shuffle 可以只传递一个待洗牌的区间,函数内会使用默认的 std::rand 函数来完成随机元素的选择,依赖全局状态。std::random_shuffle 也可以传入自定义的随机函数,不过这个函数在C++14表中已经不建议时使用了,在C++17标准中已经被移除。std::shuffle 是C++11标准添加的,也是推荐使用的洗牌函数,它的第三个参数需要传递一个均匀随机数生成器对象。

2023-08-21 16:47:54 303 1

原创 C++ STL在进行容器内容的转移操作前,应当先试用resize()函数确保足够的空间

故在进行容器内容的转移操作前,应当先试用resize()函数确保足够的空间。

2023-08-19 20:59:41 26

原创 Visual Studio中使用scanf函数读取浮点数时部分字母被吞bug

在visual studio中将语言换成C++或将scanf换成scanf_s仍会出现此bug,在Dev C上编译相同的代码则不会出现类似现象,初步判定是visual studio软件本身的问题。在visual studio中用c语言以“%f”或“%lf”为参数调用scanf函数,并输入非数字字符进行错误检测时,发现scanf在读取浮点数失败时会将缓冲区开头的某几类字符吞掉。目前发现会被吞的字符有n,i,na,in,除n和i以外其它英文字母在缓冲区的开头都不会被吞。

2023-08-08 17:52:37 147

原创 C++类模板和函数模板的声明和定义都应该放在同一个头文件里

这是因为函数模板要被实例化后才能成为真正的函数,在使用函数模板的源文件中包含函数模板的头文件,如果该头文件中只有声明,没有定义,那编译器无法实例化该模板,最终导致链接错误。但是,将模板的声明与定义写在一起实在很不优雅。尝试用“传统”方法,及在.h文件里声明,在.cpp文件里定义,然后在main函数里包含.h头文件,这样会报链接错误。一般来说,模板的声明和定义,都放在同一个头文件里,其它cpp需要用的时候包这个头文件。

2023-08-08 17:38:51 196

原创 关于C++string对象初始化的问题

不要将string类型初始化为0,否则会发生不可名状的错误,可以用{}或“null”替代。

2023-08-08 17:33:29 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除