﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-dead-horse-随笔分类-C++</title><link>http://www.cppblog.com/dead-horse/category/13938.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Nov 2011 10:01:00 GMT</lastBuildDate><pubDate>Mon, 21 Nov 2011 10:01:00 GMT</pubDate><ttl>60</ttl><item><title>C++与javascript对比</title><link>http://www.cppblog.com/dead-horse/archive/2011/10/15/158323.html</link><dc:creator>dead_horse</dc:creator><author>dead_horse</author><pubDate>Fri, 14 Oct 2011 18:42:00 GMT</pubDate><guid>http://www.cppblog.com/dead-horse/archive/2011/10/15/158323.html</guid><wfw:comment>http://www.cppblog.com/dead-horse/comments/158323.html</wfw:comment><comments>http://www.cppblog.com/dead-horse/archive/2011/10/15/158323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dead-horse/comments/commentRss/158323.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dead-horse/services/trackbacks/158323.html</trackback:ping><description><![CDATA[<div><p><span class="Apple-style-span" style="font-size: 12px;"><br /></span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">接触</span><span style="font-size:9.0pt">javascript</span><span style="font-size: 9.0pt;font-family:宋体;">应该有三个月了，但是一直没有认真去学习这门语言的一些特性，现在结合</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">的语言特性来分析一下，对自己脑海中的知识做个总结。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">1</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">是静态语言，</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt;font-family:宋体;">是动态语言。区别如下：</span><span style="font-size: 12.0pt;font-family:宋体;"> </span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">静态语言：</span></p>  <p><span style="font-size:9.0pt">1.</span><span style="font-size:9.0pt;font-family:宋体;">在不执行的时候也能够做类型检测，可以一定程度上的检测出一些逻辑错误。但是过多的声明使得程序变得冗余。</span></p>  <p><span style="font-size:9.0pt">2.</span><span style="font-size:9.0pt;font-family:宋体;">编写代码开始的时候就要考虑变量和算式应该是什么类型，有利于编写好的、高可用性的程序。</span></p>  <p><span style="font-size:9.0pt">3.</span><span style="font-size:9.0pt;font-family:宋体;">对编译器提示有作用，同时也对理解代码有作用。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">问题：灵活性不够，不定义类型无法写程序。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">动态语言：</span></p>  <p><span style="font-size:9.0pt">1.</span><span style="font-size:9.0pt;font-family:宋体;">最大优点是代码简洁。</span></p>  <p><span style="font-size:9.0pt">2.</span><span style="font-size:9.0pt;font-family:宋体;">十分灵活。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">问题：运行速度相对会慢一些，要做类型检查。最大缺点是不执行就无法检测出错误。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">2</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">是编译型语言，</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt;font-family:宋体;">是解释型语言。</span></p>  <p><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt;font-family:宋体;">的编译过程：预处理</span><span style="font-size:9.0pt">-&gt;</span><span style="font-size:9.0pt; font-family:宋体;">编译优化</span><span style="font-size:9.0pt">-&gt;</span><span style="font-size:9.0pt;font-family: 宋体;">汇编</span><span style="font-size: 9.0pt">-&gt;</span><span style="font-size:9.0pt;font-family:宋体;">链接。</span></p>  <p><span style="font-size:9.0pt">Js</span><span style="font-size:9.0pt;font-family:宋体;">的解析机制：预处理（分段读取代码预处理）</span><span style="font-size:9.0pt">-&gt;</span><span style="font-size:9.0pt; font-family:宋体;">解释执行</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">3</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">有指针，</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt;font-family:宋体;">无指针。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">在</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">中的赋值，所有的基本类型都是直接复制，而自定义类型因为有指针的存在，可以自己选择进行深复制（复制）还是浅复制（引用）。而在</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt; font-family:宋体;">中，所有的基本类型赋值都是复制，而所有的其他类型赋值都是引用。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">4</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt; font-family:宋体;">是函数式编程语言，</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt;font-family: 宋体;">不是。</span></p>  <p><span style="font-size:9.0pt">Js</span><span style="font-size:9.0pt;font-family:宋体;">把函数当作对象来处理，可以将它当作函数的输入参数和输出值（高阶函数）。</span></p>  <p><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt;font-family:宋体;">如果要把函数当作其他函数的输入参数，即实现高阶函数，必须要通过函数指针（经常还要多传递一个（</span><span style="font-size:9.0pt">void *</span><span style="font-size:9.0pt; font-family:宋体;">）类型的参数作为参数的函数的参数）。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">5</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">的继承是基于类的，</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt;font-family:宋体;">的继承基于原型</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">在</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt; font-family:宋体;">中，继承是通过类来进行的。比较符合人的直观思维。同时在生成一个类之后，是不能够对它进行修改了，除非再去修改它的定义。（</span><span style="font-size:9.0pt">Ruby</span><span style="font-size:9.0pt; font-family:宋体;">基于开放类的继承可以在定义之后任意追加类的内容）</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">在</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt; font-family:宋体;">中，继承则是通过原型链的方式来进行的。同样也可以在定义之后修改原型链。同时，也可以修改内置类型的原型链来扩展内置类型（慎用，</span><span style="font-size:9.0pt">monkey patching</span><span style="font-size:9.0pt;font-family:宋体;">可能导致内置对象大幅度修改产生难以预期的行为）。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt;font-family:宋体;">（</span><span style="font-size:9.0pt">JS</span><span style="font-size:9.0pt; font-family:宋体;">特性）</span></p>  <p><span style="font-size:9.0pt">6</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt; font-family:宋体;">的一个重要特性是闭包（当前作用域可以访问并保存外部作用域的变量）。</span></p>  <p><span style="font-size:9.0pt">Js</span><span style="font-size:9.0pt;font-family:宋体;">的闭包在函数返回之后，还能够保持闭包引用到的变量不释放。其最大的用途有两个：一是可以函数返回闭包，让外面可以读取访问到函数内的值，二是让这些变量的值一直保存在内存之中不释放。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">有闭包很容易实现内部迭代器（</span><span style="font-size:9.0pt">each</span><span style="font-size:9.0pt; font-family:宋体;">方法），而</span><span style="font-size:9.0pt">C++</span><span style="font-size:9.0pt;font-family: 宋体;">没有闭包，共有循环外部信息比较麻烦，采取的是外部迭代器方法（</span><span style="font-size:9.0pt">vector&lt;int&gt;::iterator</span><span style="font-size:9.0pt;font-family:宋体;">）。</span></p>  <p><span style="font-size:9.0pt;font-family:宋体;">注意事项：</span></p>  <p style="margin-left:18.0pt;text-indent:-18.0pt;"><span style="font-size:9.0pt;"><span>1.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size:9.0pt;font-family:宋体;">如果滥用闭包容易消耗大量内存，同时在</span><span style="font-size:9.0pt">IE</span><span style="font-size:9.0pt;font-family:宋体;">中会有内存泄漏问题，所以在退出函数之前将不使用的局部变量全部删除。</span></p>  <p style="margin-left:18.0pt;text-indent:-18.0pt;"><span style="font-size:9.0pt;"><span>2.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size:9.0pt;font-family:宋体;">闭包也会在外部改变父函数内部的值，因此用闭包当共有方法的时候要注意不要随便改变内部的值。</span></p>  <p>&nbsp;</p>  <p><span style="font-size:9.0pt">7</span><span style="font-size:9.0pt;font-family:宋体;">、</span><span style="font-size:9.0pt">js</span><span style="font-size:9.0pt; font-family:宋体;">可以显示的设置上下文。</span></p>  <p><span style="font-size:9.0pt">Js</span><span style="font-size:9.0pt;font-family:宋体;">可以通过</span><span style="font-size:9.0pt">applay</span><span style="font-size:9.0pt; font-family:宋体;">和</span><span style="font-size:9.0pt">call</span><span style="font-size:9.0pt;font-family: 宋体;">方法显示指定函数内的</span><span style="font-size:9.0pt">this</span><span style="font-size:9.0pt;font-family: 宋体;">。</span><span style="font-size: 9.0pt">applay</span><span style="font-size:9.0pt;font-family:宋体;">参数传递用数组，</span><span style="font-size:9.0pt">call</span><span style="font-size:9.0pt; font-family:宋体;">参数分开传。</span></p>  <p>（未完待续）&nbsp;</p>  <p><span style="font-size:9.0pt;font-family:宋体;">上述浅薄个人看法，如果有错误希望大家能够指正。</span></p></div><img src ="http://www.cppblog.com/dead-horse/aggbug/158323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dead-horse/" target="_blank">dead_horse</a> 2011-10-15 02:42 <a href="http://www.cppblog.com/dead-horse/archive/2011/10/15/158323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>g++基础知识</title><link>http://www.cppblog.com/dead-horse/archive/2011/09/22/156493.html</link><dc:creator>dead_horse</dc:creator><author>dead_horse</author><pubDate>Wed, 21 Sep 2011 19:59:00 GMT</pubDate><guid>http://www.cppblog.com/dead-horse/archive/2011/09/22/156493.html</guid><wfw:comment>http://www.cppblog.com/dead-horse/comments/156493.html</wfw:comment><comments>http://www.cppblog.com/dead-horse/archive/2011/09/22/156493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dead-horse/comments/commentRss/156493.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dead-horse/services/trackbacks/156493.html</trackback:ping><description><![CDATA[<div> 	<title></title> 	 	   <pre>一、编译过程： <br />1）预处理，生成.i文件 <br />2）转换成为汇编语言，生成.s文件 <br />3）汇编变为目标代码（机器代码），生成.o文件 <br />4）链接目标代码，生成可执行程序。  <br /><br />二、常用编译选项 <br />tips：选项必须独立给出：&#8216;-pg&#8217;和&#8216;-p -g&#8217;完全不同  <br /><br />-c：编译或汇编源文件，不做连接。 <br />G++ -c test.cpp输出test.o  <br /><br />-o file：制定输出文件为file  <br /><br />-Wall： 输出所有编译警告（最好加上）  <br /><br />-Dmacro=XXX：定义宏。  <br /><br />-shared：生成一个共享库文件 <br />g++ -shared -o libtest.so test.o  <br /><br />-fPIC：生成位置无关目标代码，适用于动态连接。  <br /><br />-llibrarytest：连接名字为librarytest的库 <br />真正名字是liblibrarytest.so(a) so是动态库，a是静态库。 <br />严格按照文件名搜索，版本号要创建软连接。 <br />编译搜索目录：<br />用户-L指定， LIBRARY_PATH，系统目录/lib  /usr/lib <br />运行搜索目录：<br />LD_LIBRARY_PATH，ld.so.cache &amp; /etc/ld.so.conf ，系统目录  /lib  /usr/lib <br />动态库和静态库同名，优先动态库。  <br /><br />-Ldir：添加库文件搜索路径 -Idir（include）：添加头文件搜索路径  <br /><br />-g：产生调试信息  <br /><br />-olevel：优化级别，一般用o2  <br /><br />三、静态库、共享库 <br />静态库：一些.o文件打包，在被连接后成为程序的一部分。 <br />编译方法 <br />-g++ -c test.cpp <br />-ar res libtest.a test.o <br />链接方法： <br />-g++ -Wall -o test testMain.cpp -ltest -L./  <br /><br />共享库：链接的时候不会被复制到程序中。 <br />编译方法： <br />g++ -c fPIC test.cpp	<br />//要动态 g++ -shared -WI, -soname, libtest.so, -o libtest.so.1.0.1 test.o <br />mv libtest.so.1.0.1 /usr/lib <br />sudo ldconfig &amp; || ll /user/lib/libtest.so //创建一个软连接。     <br />链接方法：<br />g++ -o test test.cpp ./libtest.so -ldx_cxx  <br /><br />四、常用命令 <br />ldd：显示程序依赖的同台共享库。  <br />file：查看文件格式信息。  <br />ldconfig：在搜寻目录下搜索出可以共享的动态链接库 </pre></div><img src ="http://www.cppblog.com/dead-horse/aggbug/156493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dead-horse/" target="_blank">dead_horse</a> 2011-09-22 03:59 <a href="http://www.cppblog.com/dead-horse/archive/2011/09/22/156493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>