随笔分类 -  C++

C++相关
摘要:本文的入门是指GCC的入门,而不是计算机科学的入门,一些概念是不解释的,比如什么是汇编啊之类的。还有本文几乎只涉及GCC对于C++的支持1. 写在前边首先给出一个gcc最简单的用法:编写源文件 test.cpp,然后使用命令 $gcc test.cpp ,gcc将生成 a.out 程序文件,使用命令 $./a.out ,执行编译好的可执行程序GCC以前是指GNU C Compiler,在那个时期GCC是C语言的编译器,而G++是C++的编译器。现在GCC是指GNU Compiler Collection,是一系列编译器的集合,包括C++的编译器;而G++特指C++的编译器1。在很久以前,编译器 阅读全文
posted @ 2012-10-28 08:32 斯啦丝拉 阅读(3053) 评论(0) 推荐(1)
摘要:sizeof返回类型、变量的大小,单位是byte(字节,8位)strlen返回C Style的长度虽然看似清晰明了,实际还是有很多细节需要注意的1. 字符串:字符串有两种:C 类型的以及C++ 类型的1.1. C 类型字符串C Style的其实就是char *或者char[]类型。1.1.1. char *类型字符串有以下定义形式:char c = 'a';char *pc = &c; // 虽然是char *类型,其实代表的是指针char *str1 = "abc"; // C 字符串const char * str2 = "abc&qu 阅读全文
posted @ 2012-10-26 09:00 斯啦丝拉 阅读(17071) 评论(0) 推荐(0)
摘要:引言C++的“=”实际有很多很多陷阱。在大部分情况下,“=”表示赋值,尤其是C语言学过来的,更有这样的体会。以下两者的执行结果是等效的:// 示例Aint a = 3;// 示例Bint a;a = 3;难免会有直观的认识,int a = 3 中,首先创建一个int的名为a的对象,然后将3赋值给a。而示例B中,将这一过程拆分成了两部。↑↑恩,万恶的根源↑↑C++中“=”的语义分类“=”其实有两种作用:1. 参与构造;2. 赋值。参与构造类似于初始化,是狭义的初始化(或者是说协助定义,异或有其他更好的说法?)——在一些场合,对从未赋值过的对象进行第一次赋值,也叫做初始化——而这里的“初始化”仅指 阅读全文
posted @ 2012-10-18 13:15 斯啦丝拉 阅读(1303) 评论(0) 推荐(0)
摘要:原文转载自水木发信人: fentoyal (fentoyal), 信区: CPlusPlus 标题: 60个你可能不知道的C++细节!! 发信站: 水木社区 (Thu Oct4 06:51:48 2012), 站内 标题党了一下,其实是前阵子记得关于C++零碎知识一些读书笔记。这东西经常自己留意不到。有部分其实一般也都用不上(因为用上的都知道了),还有很大一部分是C++11的一些容易忽视(by myself)的细节。 大牛可以帮忙查查错,初学者可以过一遍查缺补漏。写成英文是因为要打算给别人share下,要不自己也懒得整理。下文中,有些词汇需要解释,见最后边的注解... 阅读全文
posted @ 2012-10-04 12:24 斯啦丝拉 阅读(846) 评论(0) 推荐(0)
摘要:C++有三种访问控制符号:public,protect,private,同时,也有三种继承方式:public,protect,private。访问控制访问控制是对类成员而言的,对非类成员而言,访问控制是不适用的。在Java,C#中,也有访问控制的概念,不过Java和C#中,访问控制的用法与C++不用:class Foo{ // C++支持这种形式public: int a;};class Foo{ // C#支持这种形式 public int a;}public木有任何限制private只能被类声明中的成员函数和友元访问。注意~这里是“类声明中”而不是“实例中”,同一个类的... 阅读全文
posted @ 2012-08-12 10:04 斯啦丝拉 阅读(4540) 评论(0) 推荐(0)
摘要:C++11中对LValue和RValue的界定更加详细而合理(但是也更加麻烦了)1章节:C++11的新分类介绍2章节:不同值之间的转换3章节:对一些常见的表达式,如何区分他们是什么值?1. 表达式分类所谓Value,是对表达式而言的。一个表达式可以分为以下几种Value,下边详细说明1.1. lvalue(左值)lvalue指代一个函数或者对象。例如:E是指针,则*E是lvalue一个函数的返回值是左值引用,其返回值是lvalue。例如int& foo();1.2. xvalue(expiring value,临终值)xvalue指代一个对象,但是和lvalue不同,这个对象即将消亡。 阅读全文
posted @ 2012-07-01 19:05 斯啦丝拉 阅读(5236) 评论(0) 推荐(1)
摘要:原文地址http://unixjunkie.blogspot.com/2009/05/c-new-foo-vs-new-foo.html翻译加修订问题是:在C++中,以下两者有何不同new Foo;new Foo();两者都是正确的语句,它们都返回一个指针,指向新创建的Foo(存放在堆中)。但是,当Foo是POD类型时,它们的表现有所不同。PS:POD类型是指一个类或对象,其成员是原生数值类型(int, unsigned char, float, bool等等)或者另外一个POD类型。POD对象看起来像C语言风格的结构对象,例如:// PODclass Foo { public: ... 阅读全文
posted @ 2012-06-19 12:35 斯啦丝拉 阅读(1739) 评论(0) 推荐(0)
摘要:operaotr除了用于重载=、>、<之类的东西外,还有以下用途1. 类型转换class T{public: operator int() const { return 5; }};上述的代码,为T类提供了转换为int的能力。默认隐式使用。注意使用了const,保证可靠性。T t = T();int i = t;cout << i << endl; // 输出52. 赋值运算重载class T{ public: int _val; T(int val): _val(val){} void operator=(const T& t) ... 阅读全文
posted @ 2012-04-24 18:14 斯啦丝拉 阅读(330) 评论(0) 推荐(0)
摘要:我主要是想使用单元测试,VS2010是有自己的单元测试的,虽然我不抵触Microsoft的东西,但是自己做的非工业级的东西,去用Microsoft的解决方案是找罪受~所以使用了Google的测试方案。主要查阅了国外的一篇资料,虽然那位写得实在简略,但写得还是不错的,我补充梳理了一下。下载部署GTest首先去下载Google Test,网址为http://code.google.com/p/googletest/。我写此文的时候是1.6版。解压之,因为要反复使用,所以最好放到固定的目录。我解压到了D:\Selah\VSProjects\Source下。打开解压后的目录,结构如下:其中要接触的目录 阅读全文
posted @ 2012-04-11 16:03 斯啦丝拉 阅读(7963) 评论(1) 推荐(0)
摘要:最好不要将对象设为static duration的(静态的、全局的),这样的话,对象的初始化顺序以及销毁顺序均不可控,多线程时可能出现问题。构造函数:构造函数可能会调用内部函数,如果这个函数是虚函数,可能出现问题(其实也不是啥问题,如果熟悉派生类的构造过程的话)。详见下例:构造函数不会重载virtual#include <iostream>using std::cout;using std::endl;class Base{public: virtual void Foo(){ cout << "执行了Base的Foo()函数" << e 阅读全文
posted @ 2012-04-09 20:48 斯啦丝拉 阅读(453) 评论(0) 推荐(0)
摘要:static用于声明全局变量(包括类的对象),局部变量,全局函数,类的成员变量和成员函数。即,static不能用于类、结构、枚举、联合的声明。static有如下用途:①使变量具有初值:静态变量具有初值。局部变量是没有初值,而static的局部变量将有初值。全局变量本身就具有初始值,所以static不发生作用。static用于全局变量,更多是用于解决命名冲突问题。static确定初始值#include <iostream>void PrintNormal(){ int i; double d; char c; int* p; std::cout << a << 阅读全文
posted @ 2012-04-09 11:28 斯啦丝拉 阅读(2654) 评论(0) 推荐(1)