C/C++编程
文章平均质量分 62
张明奇-琦玉
乐观,自信,阳光,相信明天会更好
展开
-
解决报错:VS编译报C4996‘strncpy‘...To disable deprecation, use _CRT_
在项目-属性-C/C++-命令行-其他选项中,输入: /D"*****", 注意*****指的是编译后调试信息中提示的 use _CRT_SECURE_NO_WARNINGS,提示use什么就填入什么。比如:/D"_CRT_SECURE_NO_WARNINGS" 注意引号中无空格。在项目-属性-C/C++-常规-SDL检查,更改为否。此方法可生成dll文件,但仍可能存在警告。采用 strcpy_c 函数。原创 2023-04-20 13:43:10 · 1199 阅读 · 1 评论 -
do...while(0)在宏定义中的巧妙用法
这里将函数主体使用do()while(0)包含起来,使用break来代替goto,后续的处理工作在while之后,就能够达到同样的效果。我们在写代码的时候都习惯在语句右面加上分号,如果在宏中使用{},代码里就相当于这样写了:“{...};这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被调用。while(0)的功能就不仅仅是循环了,这是do..while(0)的一种巧妙用法。实际上,do{...}while(0)的作用远大于美化你的代码。这显然与我们的本意不符。原创 2022-11-18 10:58:13 · 973 阅读 · 0 评论 -
VS code 离线安装插件/扩展方法
在实际工作中,由于大多开发环境为内网开发,无法连接外网,需要进行离线安装相应插件,此文用于记录vscode离线安装插件方法。1. 方法一: ① 到vscode官网 Extensions for Visual Studio family of products | Visual Studio Marketplace 搜索需要使用的插件名称 ② 下载对应扩展程序文件 ③ 到vscode中选择 "从VSIX安装" ④ 选择下载的扩展文件进行安装即可2. 方法二:备注:如果遇见使用方法一离线安装失败的情况原创 2022-06-30 19:54:53 · 8244 阅读 · 2 评论 -
C++创建不可以继承的类
#ifndef __DT_MAIN_INHERITED_TYPE_H__#define __DT_MAIN_INHERITED_TYPE_H__#ifdef MakeFinal#undef MakeFinal #endif#define MakeFinalnamespace DynamicTarget{ //-->可被继承对象 //-->一个对象可被继承应该有虚析构函数 class CanBeInherited { public: virtual ~CanBeI.原创 2020-08-31 10:42:20 · 169 阅读 · 0 评论 -
std::string用法总结
在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询。在网上摘抄一下总结一下,为以后的查询方便:string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化string类的字符操作:const char &operator[](int转载 2014-12-31 10:45:48 · 887 阅读 · 0 评论 -
“#if 0/#if 1 ... #endif”的作用
1、先说“#if 0/#if 1 ... #endif”的作用,楼上诸位或多或少都说到了一点,但都没有说到关键的地方。我们知道,C标准不提供C++里的“//”这样的单行风格注释而只提供“/* */”这样的块注释功能,我们通常使用它写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用),当然,这里所谓的“注释作用”和“屏蔽作用”是我们从功能上下的主观定义,对预处理器原创 2015-04-17 17:59:46 · 3551 阅读 · 0 评论 -
#ifndef/#define/#endif使用和交叉引用问题详解
想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 其实“被重复引用”是指一个头文件在同一个cp原创 2015-10-26 11:54:49 · 1620 阅读 · 0 评论 -
freopen()函数的使用
当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。 使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 函数名:转载 2015-12-24 19:19:08 · 784 阅读 · 0 评论 -
浮点数越界或者无效-1.#IND000
float acos(float x)参数x的范围为-1.0f到1.0f之间,返回值范围在0.0f到3.141592653f之间,值得注意的是:当x超出[-1.0f, 1.0f]这个范围时此函数将返回一个-1.#IND000值,代表无穷小而编译器会不给出任何提示,通常此将会导致程序错误或崩溃,所以以后要注意数学函数的参数范围了.可以通过以下代码进行调试: float tes转载 2016-04-04 22:11:31 · 6052 阅读 · 0 评论 -
C++访问限制:private public protect经典诠释
public 意味着在其后声明的所有成员对所有的人都可以取。 private 意味着除了该类型的创建者和类的内部成员函数之外,任何人都不能存取这些成员。 protect 它与private基本相似,只有一点不同:继承的结构可以访问protected成员,但不能访问private成员。=============================================public人缘好,转载 2016-04-04 22:13:34 · 1940 阅读 · 0 评论 -
字对齐、半字对齐、字节对齐的理解
一般情况下字为32位(4字节)、半字为16位(2字节)、字节为8位(1字节)。大多数计算机使用 字节(8位的数据块)作为最小可寻址的存储器单位 ,而不是访问存储器中单独的位。存储器的每一个字节都由唯一的数字标识,称为该字节的地址,所有可能地址的集合称为存储器空间。举例来说,ARM处理器工作状态有如下两种:ARM状态:执行字对齐的32位ARM指令。Thumb状态:执行原创 2017-03-19 18:34:43 · 5314 阅读 · 0 评论 -
为什么子类的初始化列表不能初始化父类的成员
C++初始化列表是一种效率更高的初始化方法,但也有一些不能使用的场景。举个例子以下定义一个矩形,然后再定义一个正方形,继承自矩形。这段代码有问题吗?...class Rectangle{public: Rectangle() :a(0), b(0){} Rectangle(int x, int y) :a(x), b(y){}public: int a; i...原创 2018-05-04 10:33:36 · 4992 阅读 · 2 评论 -
#pragma push_macro("MACRO_NAME") 与 #pragma pop_macro("MACRO_NAME") 用法详解
1. 解释(1) #pragma push_macro("MACRO_NAME") 是把当前与宏 MACRO_NAME 相关联的字符串值保存到栈中;(2) #pragma pop_macro("MACRO_NAME") 是把栈中之前保存的与宏 MACRO_NAME 相关联的字符串值重新关联到宏 MACRO_NAME 上.2. 说明(1) 必须先用 ...原创 2019-05-29 15:12:47 · 2495 阅读 · 0 评论 -
【c++】指针参数是如何传递内存的
参数策略如果函数的参数是一个指针,不要指望用该指针去动态申请内存。如下:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); //st原创 2015-02-06 09:43:59 · 914 阅读 · 0 评论 -
C++之tinyXML使用
tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你的工程中,没有STL也可以编译运行。 下面我从这几个方面谈谈对tinyXML类库的使用以及理解。 首先在sourceforge上下载tinyXML类库,地址:h原创 2014-10-30 10:22:23 · 44269 阅读 · 3 评论 -
继承与派生——多继承
只有一个基类的派生方法称为单继承。实际上,可以为一个派生类指定多个基类,这样的继承结构被称为多重继承或多继承。多继承声明 在C++中,声明具有两个以上基类的派生类与声明单继承派生类的形式相似,只需将要继承的多个基类使用逗号“,”分隔即可。其声明的一般形式如下:class 派生类名 : 继承方式1 基类名1,继承方式2 基类名2,……,继承方式n 基类名n{// 派生原创 2012-03-09 14:14:45 · 1130 阅读 · 0 评论 -
抽象类----类中只定义了protected型的构造函数
对一个类来说,如果只定义了protected型的构造函数而没有提供public构造函数,无论是在外部还是在派生类中都不能创建该类的对象,但可以有其派生出新的类,这种能派生新类,却不能创建自己对象的类是另一种形式的抽象类例如:#include using namespace std;class Base{private: int x;protected: Base(i原创 2012-03-09 16:54:45 · 4616 阅读 · 0 评论 -
_T和_L的区别
问:#define ABC L"ABC" L 宏是干什么用的,和Unicode相关吗? 如果这样,这和 #define ABC _T("ABC") 有分别吗?答:L表示UNICODE串,比如wchar_t* str = L"yangsongx"; _T在ANSI编译模式下表示ANSI串,在UNICODE下表示UNICODE串,比如 TCHAR原创 2013-05-14 10:55:26 · 1459 阅读 · 0 评论 -
C++ 异常处理 catch(...)
如果要想使一个catch block能抓获多种数据类型的异常对象的话,怎么办?C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: int main() { try { cout //这里抛出一个异常(其中异常对象的数原创 2013-07-25 17:24:01 · 1867 阅读 · 0 评论 -
C++ 在堆上开辟与释放二维、三维指针
学习C++新手通常会对指针的使用比较头疼,其实指针的概念很简单,只要能悟清楚这样一个简单的道理就能对指针有一定的认识了: 例如 int *a = new int[10]; 一维指针其实就相当于一维数组,不用去看书上所说的数组在内存中的首地址这些晦涩的话,以此类推 二维指针就相当于二维数组,新手对一维数组的开辟与释放比较容易熟悉,例如上面的a 释放就是 delete []a; a = NULL; 注转载 2013-08-14 15:51:43 · 2107 阅读 · 0 评论 -
C/C++中extern关键字详解
1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数原创 2013-11-28 11:40:47 · 923 阅读 · 2 评论 -
C/C++中static关键字详解
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将转载 2013-11-28 11:42:11 · 768 阅读 · 0 评论 -
Debug与Release版本的区别
Debug与Release版本的区别 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和 Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Deb转载 2011-08-26 00:23:39 · 2271 阅读 · 0 评论 -
哈希表实现
/********************************************************************* 哈希表的实现 建立哈希表是为了消除通过遍历比较来搜索键带来的时间浪费。如果想在一个表中直接地找到记录,记录的存储位置和它的关键字之间建立一个确定的对应关系f(),原创 2011-10-19 01:28:54 · 1093 阅读 · 0 评论 -
C++标准模板库复习
张明奇(卡哥)一、主要内容 泛型程序设计与标准模板库有关的概念和术语C++标准模板库中的容器迭代器标准C++库中的算法函数对象 泛型程序设计将程序写得尽可能通用 将算法从特定的数据结构中抽象出来,成为通用的C++的模板为泛型程序设计奠定了关键的基础 二、STL是泛型程序设计的一个范例 容器(container)迭代器(itera原创 2012-08-30 11:06:11 · 1260 阅读 · 0 评论 -
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数:转载 2013-12-02 17:10:06 · 1583 阅读 · 0 评论 -
STL中的set容器的一点总结
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让转载 2014-05-28 17:02:23 · 1077 阅读 · 0 评论 -
继承与派生——虚基类
虚基类的概念 一般,不希望在一个派生类中存在某个公共基类的多个同名的成员变量。虽然也可以通过在成员变量名前面加上“类名::”消除其二义性,但解决这个问题的最好办法是使用虚基类。虚基类方法可以保证在任何一个存在公共基类的派生类中,不会存在一个以上的同名成员变量。 所谓虚基类,就是说一个类层次中,如果某个派生类存在一个公共基类,将这个基类设置为虚基类,这时从不同的路径继原创 2012-03-09 13:57:06 · 1900 阅读 · 0 评论