C++:小端模式与强制数据类型转换
1.先从一个问题说开去
C++数据类型转换的问题
#include
void main()
{
int i=0xb62;
char c;
c=i;
cout
这里为什么输出的是b?
2.先检测一下我们所使用的电脑的CPU的字节序
版本一(有问题,结果无论如何都是34,不能说明34是高地址的还是低地址的)
版本二(根据 shineyan1991的留言修改后得到 ...
linux下安装或升级GCC 4.8以支持C++11标准
C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充。随后各编译器厂商都各自实现或部分实现了C++中的特性。
如需查看各编译器对C++11的支持程度,请参看文章:
本文主要介绍在Linux系统下,如何升级GCC以支持C++11。目前来看GCC是对C++11支持程度最高最多的编译器,但需 ...
Eclipse中如何终止循环cin的输出
Eclipse中, 使用CDT编写C++代码时, 循环(while)cin输入程序, 需要终止, 如:
while (cin>>i)
S.insert(i);
Eclipse的终止方法是:
首先在输入数据框内, 使用回车(Enter) -> 再终止(terminate)程序, 即输出结果.
更多精彩内容:http://www.bianceng.cn/Programming/cplus/ ...
C++中虚函数(virtual function) 的 使用范围
虚函数(virtual function) 在 基函数(base function) 和 派生函数(derived function) 之间可以覆写(override);
如果派生函数有与虚函数同名的函数, 则会隐藏虚函数, 但是虚函数还会在;
由于派生对象和基对象可以转换, 可以只使用基对象部分; 派生对象的虚函数会覆写基对象的虚函数;
代码:
/*
* cppprimer.cpp
*
* Cr ...
C++中“tuple”(元组)容器详解
tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值;
tuple容器, 可以使用直接初始化, 和"make_tuple()"初始化, 访问元素使用"get()"方法, 注意get里面的位置信息, 必须是常量表达式(const expression);
可以通过"std::tuple_size::value"获取元素 ...
C++中智能指针(smarter pointer)自定义删除器(deleter) 的方法
智能指针包含两种"shared_ptr"和"unique_ptr", 由于两种指针的实现方式不同, 所以传递删除器的方式也不同;
"shared_ptr"的传递删除器(deleter)方式比较简单, 只需要在参数中添加具体的删除器函数名, 即可; 注意是单参数函数;
"unique_ptr"的删除器是函数模板(function template), 所以需要在模板类型传递删除器的类型(即函 ...
C++中正则表达式(regex) 迭代器(iterator) 详解
正则表达式(regex), 使用boost的regex头文件, 是C++11的新标准, 但是gcc4.8.1并未完全支持, 所以使用boost库;
具体安装: http://blog.csdn.net/caroline_wendy/article/details/17282187
正则表达式的书写规范, 以ECMAScript为例, 使用迭代器可以遍历原字符串, 输出符合要求的所有字符串;
使用prefix()和suffix()方法, 可以 ...
C++中函数模板(function template) 的 推进(forward) 问题
函数模板在调用函数的时候, 由于实参(argument)转换形参(parameter)的时候, 会发生改变, 导致无法保留原实参的信息, 即推进(forward)问题;
主要包括: 引用和右值;引用, 即因为模板参数非引用, 导致复制操作, 无法提供引用类型;右值, 即因为模板参数只能转换为左值, 无法提供右值;
解决方法:
引用: 使用右值参数(T&& t), 可 ...
C++中函数模板(function template) 的 重载(overload) 详解
函数模板(function template)重载, 即实例化特定的模板, 确定T的类型, 选择匹配度最高的一个;
需要注意传递的具体类型, 如传递的是"&s", 则表示"string* t = &s", 即实际匹配的类型为"string* t";
当非函数模板和函数模板匹配度相同时, 优先选择非函数模板;
调用模板时, 一定要注意顺序, 或者提前声明, 以保证可以找到函数 ...
C++中函数模板(function template) 详解
C++的模板(template)是泛型编程(generic programming)的基础;
面向对象编程 是 运行(run time)时 知道类型(type); 泛型编程 是编译(compilation) 知道类型;
函数模板(function template)包含模板参数列表(template parameter list);
每个参数类型之前必须包含关键字typename或class, 尽量使用typename, 表达意思更加明确;
...
C++的异常类(exception classes) 详解
异常类(exception classes)包含4种基类,bad_cast, bad_alloc,runtime_error, logic_error;
runtime_error: 错误只有当程序运行时, 才能检测出来;
logic_error: 应用程序检测出的逻辑错误.
其中bad_cast, bad_alloc使用默认构造器, runtime_error, logic_error, 必须使用string(C-style或stl)进行初始化;
用户定义的类也可以 ...
C++中的虚继承(virtual inheritance)
虚继承主要是避免基类重复被继承, 包含多个相同基类, 导致歧义性, 使用虚基类(virtual base class)继承, 可以使派生对象只包含一份基类文件.
如果不使用虚继承, 则派生类需要提供一份自己的示例版本,
参见: http://blog.csdn.net/caroline_wendy/article/details/18077235
代码:
/*
* cppprimer.cpp
*
* Created on: ...
C++: 把文本文件(txt)的所有内容读入字符串(string), 最高效的方法
代码:
/*
* main.cpp
*
* Created on: 2014年6月17日
* Author: Spike
*/
/*eclipse cdt, gcc 4.8.1*/
#include
#include
#include
#include
std::string get_file_contents(const char *filename)
{
std::ifstream in(filename, std::ios::in | std::ios::binary) ...
C++:默认复制构造函数 执行 浅拷贝
C++, 会默认生成一个复制构造函数, 当类中出现指针时, 复制会执行浅拷贝, 即只复制指针的地址, 不会复制数据;
所以在类中, 使用指针时, 需要注意; 如果想使用深拷贝, 可以添加复制构造函数.
以下代码, 如果不添加复制构造函数, 则会运行出错, 但可以通过编译,
运行时, 因为删除(delete[])两次str所指的同一片地址空间, 所以 ...
C++:接口继承(interface) 和 实现继承(implementation) 详解
继承接口和实现, 主要包含三种方式:
1. 只继承接口, 纯虚函数;
2. 继承接口和实现, 允许覆写(override), 虚函数;
3. 继承接口和实现, 不允许覆写(override), 非虚函数;
1. 纯虚函数:
只继承接口, 但是派生类必须实现其接口;
纯虚函数也可以包含实现, 但是只能在指明类(即, class:的时候使用
2. 虚函数:
继承接口和实现, 派 ...
C++:程序运行时间
C++使用C语言的time库, 即可统计程序的运行时间;
头文件#include
代码:
#include
#include
void do_something()
{
for(int i=0;i(end-start)/CLOCKS_PER_SEC;
std::cout
更多精彩内容:http://www.bianceng.cn/Programming/cplus/
C++:RTTI(RunTime Type Information)运行时类型信息 详解
RTTI, RunTime Type Information, 运行时类型信息, 是多态的主要组成部分,
通过运行时(runtime)确定使用的类型, 执行不同的函数,复用(reuse)接口.
dynamic_cast可以 使基类指针转换为派生类的指针, 通过判断指针的类型, 可以决定使用的函数.
typeid(), 可以判断类型信息, 判断指针指向位置, 在多态中, 可以判断基类还是派生 ...
PE文件格式文档
NT头---可选头---IMAGE_DATA_DIRECTORY---IMAGE_DIRECTORY_ENTRY_RESOURCE--->
IMAGE_SECTION_HEADER[](节头/表)
……
节n---->IMAGE_RESOURCE_DIRECTORY_ENTRY[]---IMAGE_RESOURCE_DIRECTORY[]
-----------------0OS头
-----------------1:NT头
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;//PE文件头标志 :"PE\0 ...
浏览文件的一段代码
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TTreeNode* currnode;
int DirCount,FileCount,DriveCount;
//--------------------------------------------------- ...
C++编程人员容易犯的10个C#错误
我们知道,C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解。尽管C#与C++在语法上的变化是很小的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的C++编程人员时刻铭记在心。在本篇文章中我们将讨论C++编程人员最容易犯的十个错误。
陷阱1: 没 ...