Category Archives: 计算机编程语言

Programming Language

C++程序设计语言之几种通用的强制转换运算符

C++程序设计语言之强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。大多数的C++编译器都支持大部分通用的强制转换运算符:

(type)expression: type是转换后的数据类型。

const_cast(expr): const_cast运算符用于修改类型的const/volatile属性。除了const或volatile属性之外,目标类型必须与源类型相同。这种类型的转换主要是用来操作所传对象的const属性,可以加上const属性,也可以去掉const属性。
Continue reading

C++程序设计语言之类型限定符const、volatile和restrict

C++程序设计语言之类型限定符const、volatile和restrict,提供了变量的额外信息。

限定符 含义
const const类型的对象在程序执行期间不能被修改改变。
volatile 修饰符volatile告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。
restrict 由restrict修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。

Visual Studio在Release模式下开启Debug调试的方法

Visual Studio在Release模式下开启Debug调试,该模式在保留Release模式下运行快速的前提下,又可以给特定的工程开启Debug模式,进行针对性的调试。这样比整个项目都采用Debug模式进行编译,在调试时会提高效率。Visual Studio在Release模式下开启Debug调试的方法如下:

1、 项目 ——> 属性 ——> C/C++ ——> 常规 ——> 调试信息格式 ——> 程序数据库 (/Zi) 。

2、 项目 ——> 属性 ——> C/C++ ——> 常规 ——> 优化 ——> 优化 ——> 已禁用 (/Od)。

3、 项目 ——> 属性 ——> 链接器 ——> 调试 ——> 生成调试信息 ——> 生成调试信息 (/DEBUG)。

C++语言程序设计之处理复合表达式的两条经验准则

在C++语言中,以下两条经验准则对书写复合表达式有益:

1、拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。

2、如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。

第2条规则有个重要的例外,当改变运算对象的子表达式本身就是另外一个子表达式的运算对象时该规则无效。例如,在表达式*++iter中,递增运算符改变了iter的值,求值的顺序不会成为问题,因为递增运算(即改变运算对象的子表达式)必须先求值,然后才轮到解引用运算。显然,这是一种很常见的用法,不会造成什么问题。

C++语言程序设计之智能指针基本规范和陷阱

智能指针可以提供对动态分配的内存安全而又方便的管理,但这建立在正确使用的前提下。为了正确使用智能指针,我们必须坚持一些基本规范:

1、不使用相同的内置指针值初始化(或reset)多个智能指针。
2、不delete get()返回的指针。
3、不使用get()初始化或reset另一个智能指针。
4、如果你使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了。
5、如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。

C++语言程序设计之map和unordered_map的下标操作

在C++语言中,对于一个map使用下标操作,其行为与数组或vector上的下标操作很不相同:使用一个不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中。

一、c[k]
返回关键字为k的元素;如果k不在c中,添加一个关键字为k的元素,对其进行值初始化。

二、c.at(k)
访问关键字为k的元素,带参数检查;若k不在c中,抛出一个out_of_range异常。

C++语言之new和delete管理动态内存的三个常见问题

在C++语言中,使用new和delete管理动态内存存在的三个常见问题:

1、忘记delete内存
忘记释放动态内存会导致人们常说的“内存泄露”问题,因为这种内存永远不可能被归还给自由空间了。查找内存泄露错误是非常困难的,因为通常应用程序运行很长时间后,真正耗尽内存时,才能检测到这种错误。

2、使用已经释放的对象
通过在释放内存后将指针置为空,有时可以检测出这种错误。
Continue reading

C语言程序设计之创建动态二维数组问题的解决方案

C语言动态创建一维数组只需使用malloc或者calloc就可以,但是动态创建二维数组就复杂得多。那么,要怎样才能动态创建二维数组呢?

一、创建非连续空间的动态二维数组
二维数组可以看作是由许多行组成的,每一行都是一个一维数组。首先创建一个一维的指针数组,然后为该指针数组中的每个指针再创建一个一维数组,这样就动态创建一个二维数组了。。实现代码如下:
Continue reading