![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 56
C/C++
王者之路001
解决问题才是王道!
展开
-
由一段语句没有return论述try-catch语句中的return
最近在写一个判定程序,发现程序运行有异常,于是,就提供了一个try-catch捕捉异常。同时,发现该程序里return失效了。当时就发生了我乍一看非常诡异的现象:一个if判定语句里的return,不运行了。我当时很诧异,以为是编译器坏了,甚至以为是缓存没有清理,还多次rebuild和清理缓存。最后,认真想了下,应该是try-catch语句的问题。果然查到如下资料:[1]【java】try-catch-finally语句中return的执行顺序思考 | iTimeTraveler[2]原创 2021-10-15 10:52:10 · 137 阅读 · 0 评论 -
C++ 11 枚举变量
1.枚举变量及其用法 枚举,是C语言的一种基本类型。在C语言中,枚举列举了一组基本的变量,并穷举了所有变量。枚举变量一般用于状态或者事件的穷举。一种常用的方法是:枚举变量标注状态机的状态变化。(见我本人的博客:https://blog.csdn.net/wangzhezhilu001/article/details/107342443) 同时,枚举变量还用于标注有限的变量,防止变量出错。2.C++ 98之前的枚举变量 在C系列语言中,枚举变量虽然存在,但长期...原创 2020-07-17 13:42:22 · 971 阅读 · 0 评论 -
由一个错误说const的用法,兼谈编译器
今日,对一个函数进行改写,发现编译错误。原程序和错误如下:std::string getResult(const std::string &strInput, const std::map<std::string, std::string> &mapResult){ return mapResult[strInput]; //错误}我本人仔细想了想,错误原因是这样的:1)map本身的[]操作,从语法上是这样的:如果存在相应key值,则返回对应value;原创 2020-06-03 20:59:02 · 194 阅读 · 0 评论 -
C++11部分新特性
C++11新特性概述 C++11标准是C++语言的重大改动。在C++11之前,C++本身更像C语言,兼容和借用了C语言的很多特性。在C++11之后,C++语言更多是借鉴了JAVA、python等所谓现代语言的特点。经过C++11的标准,C++语言长得更像现代语言,但同时,也导致了C++语言的多种特性:既不像C语言本身那么精炼,又不像真正的纯面向对象语言。C++11之后的C++语言,功能更加复杂,更加多样,也造成了C++的编译器过重(几乎在所有语言中,C++编译器是运行最慢的)。 ...原创 2020-06-03 14:45:12 · 362 阅读 · 0 评论 -
QT之QEvent机制
1.QEvent简介 QEvent是QT的事件机制。QT的事件机制,肯定是借鉴了Windows的消息机制。Windows把所有的鼠标键盘以及内部事件都当作消息,并放进消息处理机制处理。QT本身,是把各个操作系统的API进行调用。Windows的消息机制,是一个非常简单有效的机制,QT作为借鉴,不为过。 QEvent是QT的事件机制的基础;QEvent可以被QOject灵活运动,使事件得到接收和响应。 Qt的主事件循环(QCoreApplication :: ex...原创 2020-05-25 21:01:58 · 2911 阅读 · 0 评论 -
C++ new失败处理
1.C++里new分配空间失败 C++里,new是最常用的分配堆空间的操作符。 new和malloc的区别体现在这几方面: 1)new是操作符,malloc是函数; 2)new和delete操作符对应,malloc则和free函数对应; 3)new可以直接调用构造函数,而malloc不可以; 4)new...原创 2020-04-27 19:14:09 · 7446 阅读 · 0 评论 -
tinybind编译和运行
1.背景 XML是一种极好的语言,可以对现实实际和项目进行合理描述。XML解析也有各种成熟的方案。C++是一种常用的语言,有成熟的XML解析工程用于C++。但XML直接转C++的结构体,是一种不太好完成的事情。于是,各种搜资料,发现tinybind是一种比较好的XML与C++互相转换的工具。2.遇到的问题 下载tinybind有两个地址: 1)ht...原创 2020-04-21 17:10:11 · 414 阅读 · 0 评论 -
ubuntu QT Creator Fatal IO error 2 (没有那个文件或目录) on X server :0
这几天,碰到一个很奇怪的问题,用QT Creator 编写的程序,在Windows上运行良好;移植到MAC上,也测试运行没有问题。现在计划把程序移植到Ubuntu上。移植完成之后,编译没有问题(在移植到MAC上时已经把Windows与类Unix的语法不兼容的问题全解决了),然后运行程序,发现程序崩溃,并提示如下错误:(程序名:88351): Gdk-WARNING ** 程序名: F...原创 2020-04-14 18:04:07 · 3397 阅读 · 2 评论 -
QT设计重要特点:QT隐式共享(Implicit Sharing)
隐式共享是QT设计的一个重要特点。QT隐式共享的原文是这样的(来源于https://doc.qt.io/archives/qt-4.8/implicit-sharing.html):“Many C++ classes in Qt use implicit data sharing to maximize resource usage and minimize copying. Implic...原创 2020-03-27 14:10:43 · 345 阅读 · 0 评论 -
二义性和C++消除二义性
1.二义性 二义性的定义是:“如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的。”(该定义来自于百度百科)用通俗的话讲,如果一句话或者一个符号具有两种以上的解释和含义,就说明该话或者符号具有二义性。二义性意味着含义不清和不明确。 在计算机语言中,如果语言具有二义性,必须消除二义性,才能使程序正常运行。...原创 2020-03-26 17:43:20 · 6444 阅读 · 0 评论 -
C++11编译问题:warning: ISO C++11 does not allow conversion from string literal to 'char *'
在新写的采用C++11标准的编译器里,进行编译以后,原来没有任何提示的语句,竟然出现如下问题:char *pName = "NULL";warning: ISO C++11 does not allow conversion from string literal to 'char *'我虽然知道这个是指针指向了不可修改的常量字符串,但在C++98 中,该种类型的语句首先是支持的,其次...原创 2020-02-07 22:42:59 · 9984 阅读 · 0 评论 -
STL vector 和 QT QVector的用法差别实例
1.STL与数据结构 STL是C++里最常用的容器(但不是最好的容器)。很多人在计算机学习阶段,对计算机的数据结构课程是一塌糊涂的;这种一塌糊涂的感觉,甚至伴随着很多计算机软件工程师的长期的职业周期。当然,这其实并不能够完全怪计算机学习者,相当一部分原因是中国大学的计算机学习的教材把明明很简单的事物弄成非常复杂的事物。大学的数据结构教材,一般是张乃孝的《算法与数据结构》和严蔚敏《数...原创 2020-01-13 17:58:57 · 2335 阅读 · 0 评论 -
std::string 赋值为空指针
今天运行的程序崩溃了,发现原因为程序中用到了STL的std::string赋值为空指针,形式如下:void fun(const char *pTest){ std::string strTest = pTest;}就其语法来说,是没有错误的,但程序运行却崩溃了。原因为:std:string 不能接受赋值为空指针。原因为:std::string 在赋值为空指针的时候,会...原创 2020-01-03 16:06:09 · 4777 阅读 · 0 评论 -
也谈C++11里的auto类型
1.C++的强类型语言特性C语言本身是一种强类型语言,在C语言基础之上的C++也是一种强类型语言。在C和C++之中,一切变量(包括函数),都必须明确标明类型。只有类型确定,才会被编译器认为是一种可以接受的语法。由于C++本身的强类型特性,传统的C++开发会有很多特点:1)任何变量和函数都必须明确标明类型;2)如果两个不一致类型的变量进行比较或者赋值,要么报错,要么会被隐式转换(隐式...原创 2019-12-24 10:35:31 · 246 阅读 · 2 评论 -
C++容器之vector
1.C++容器 容器是很多编程语言必不可少的功能。容器,本身是数据结构;这种数据结构承载了各种数据类型。容器是泛型编程的重要承载。 容器,不仅提供了数据结构,还提供了各种算法和功能。所谓算法,即解决问题的方法。容器提供了一系列解决问题的方法(即算法),从而带来使用的便利性。 容器,还有个特点是:提供了分配器。分配器负责容器空间的分配和释放;这带来...原创 2019-11-28 15:41:49 · 154 阅读 · 0 评论 -
NULL和nullptr
1.NULL NULL是C语言的重要宏之一。NULL本意为判断指针是否为空。在C语言中,NULL的定义如下: #undef NULL#if defined(__cplusplus)#define NULL 0#else#define NULL ((void *)0)#endif 一般来说,NULL应该解释为指针变量,但NULL本身的变量值为0,这就...原创 2019-11-27 16:48:57 · 553 阅读 · 0 评论 -
由C++ assign()函数引出的一个问题
今天学习了下C++的assign()函数。从字面上来说,assign()函数是给容器进行分配新的空间,把新的值拷贝到容器内。恰好发现一篇学习博客(http://blog.csdn.net/airfer/article/details/7708276)。该博客上代码如下://关于assign的函数的好处,应该很好理解就是在不能使用赋值符“=”的情况下,可以将一个容器中的部分元素通过迭代器传递原创 2015-09-20 15:28:26 · 975 阅读 · 0 评论 -
windows链接时遇到未使用的库libboost_iostreams-vc110-mt-1_64.lib
问题描述,网上下载了一个样例,在VS2012中进行了编译,编译过程中发现链接无法成功。于是,右键该工程,选择“属性”——>“链接器”——>“常规”——>“显示进度”;选择了“显示所有进度消息”。发现,在消息中显示了如下消息:1> 未使用的库:1> E:\Boost\lib\libboost_iostreams-vc110-mt-1_64.lib我很疑惑,后来原创 2017-05-15 16:20:11 · 714 阅读 · 0 评论 -
在Linux上找不到strcmpi 怎么办
最近在搞Windows往Linux上代码移植,发现Linux上无函数strcmpi ,即使是sting.h头文件也没有。发现Linux上有类似函数strcasecmp,于是加入上述宏定义.#ifndef WIN32#define strcmpi strcasecmp#endif...原创 2015-08-31 11:40:47 · 1067 阅读 · 4 评论 -
三目运算
1. C语言三目运算C语言的三目运算表达式为 ?:,该表达式用法如下 a > b ? a : bC语言的三目运算可以作为简单函数,比如模板函数(模板确切说不是纯C语言,而是C++):template<Type T>T max(T a, T b){ return a > b ? a : b;}2.python三目运算python 的...原创 2019-06-20 14:33:03 · 3509 阅读 · 2 评论 -
golang的BitSet
1.BitSet是什么BitSet是借鉴位图(BitMap)概念创造的一个数据结构。所谓的BitMap 就是用一个 bit 位来标记某个元素对应的 Value,而 Key 即是该元素。由于采用了 Bit 为单位来存储数据,因此在内存占用方面,可以大大节省。(《编程珠玑》第一章引入的问题,提到了 Bitmap)BitSet的好处是用很小的空间标记已存的数据(每一bit对应)。在查找中,我...原创 2019-06-25 16:56:05 · 1483 阅读 · 0 评论 -
C++11特性之=default 和 =delete
1.C++11新特性之=defaultC++ 的类有四类特殊的成员函数,分别为:默认构造函数,析构函数,拷贝函数以及拷贝赋值函数。但是如显式的自定义了非默认构造函数,却没有定义默认构造函数,在类实例化的时候,会出现错误。手动编写存在两个问题:1. 程序员工作量变大 2. 没有编译器自动生成的默认特殊构造函数效率高。为了解决上述的两个问题,C++ 11标准引入了一个新特性:defaulted...原创 2019-07-18 18:10:13 · 377 阅读 · 0 评论 -
C++11特性值std::function
std::function是C++11添加的新特性之一,需要使用头文件 #include<function>关于std::function官方说明如下:Class templatestd::functionis a general-purpose polymorphic function wrapper. Instances ofstd::functioncan sto...原创 2019-07-19 16:35:09 · 594 阅读 · 0 评论 -
C++11特性之std::bind和std::placeholders
1.std::bindC++11的std::bind特性用于把可调用对象保存起来,在需要的时候再调用。这是一种延迟计算的思想。延迟计算是函数式编程语言的特性,即不直接求值,而是在用到的时候,才进行计算。延迟计算的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题。2.std::placeholdersplaceholders为占位符的意思,用于函数绑定的时候,缺省...原创 2019-07-19 17:01:19 · 1030 阅读 · 0 评论 -
(转)C++11并发之std::thread
原文链接:https://www.cnblogs.com/lidabo/p/7852033.html本文概要:1、成员类型和成员函数。2、std::thread 构造函数。3、异步。4、多线程传递参数。5、join、detach。6、获取CPU核心个数。7、CPP原子变量与线程安全。8、lambda与多线程。9、时间等待相关问题。10、线程功能拓展...转载 2019-07-22 10:17:07 · 364 阅读 · 0 评论 -
C++ RTTI
1.RTTIRTTI的英文全部意思为Run-Time Type Identification,意思为“运行时类型判断”。RTTI的原理为对某一范型或者接口类型,在运行时再判断该类型或者接口的类型,然后运行对应类型的功能函数。RTTI的类型的运用,在各种语言中广泛运用;对于JAVA来说,RTTI甚至被号称为JAVA的多态机制的基础。2.C++中的RTTI在C++中,RTTI的提出是在...原创 2019-08-07 21:57:03 · 238 阅读 · 0 评论 -
C++11 auto和decltype
1.C++11 auto在C++98中,auto的用法为变量为自动变量,拥有自动的生命周期。但显然,变量默认都是有自动生命周期的。在C++11中,auto的用法为:推断变量的类型。举例如下:int i = 1;auto j = i;在该例子中,auto让变量的类型不直接获得而是推断得知。从C++语言角度来讲,C++是强类型语言,必须确定变量的类型。而python等弱类型...原创 2019-08-08 20:55:28 · 183 阅读 · 0 评论 -
QT之容器
1.QT的容器 容器是进行范型开发的一种重要工具;甚至是所谓的面向对象的另一种多态的表现。 QT在STL基础之上,实现了自己的容器。2.QT容器的分类 QT的容器主要由三类: 1)顺序型,以QLi st为代表,包括QLinkedList, QVector, QStack, QQueue; 2)Key-Value型,以...原创 2019-08-28 22:06:38 · 247 阅读 · 0 评论 -
static关键字的用法(C++)
static关键字,语法上为固定和静态。static本身,意味着把该值(变量或函数)变为静态的和全局的。被static修饰的变量,成为静态变量,可以被多次使用而不释放空间;static修饰的变量,同时只能被本地运用,不能被外部extern引用。被static修饰的函数,只能被本地使用。某一类的static函数,属于该类。外部运用类中的static函数,必须加上类名才能调用该函数。类中的...原创 2015-08-17 15:59:04 · 382 阅读 · 0 评论