﻿<?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++博客-时光隧道-文章分类-note</title><link>http://www.cppblog.com/thinke365/category/11693.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 17:52:01 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 17:52:01 GMT</pubDate><ttl>60</ttl><item><title>100</title><link>http://www.cppblog.com/thinke365/articles/95380.html</link><dc:creator>thinke365</dc:creator><author>thinke365</author><pubDate>Sat, 05 Sep 2009 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/thinke365/articles/95380.html</guid><wfw:comment>http://www.cppblog.com/thinke365/comments/95380.html</wfw:comment><comments>http://www.cppblog.com/thinke365/articles/95380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/thinke365/comments/commentRss/95380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/thinke365/services/trackbacks/95380.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">1、变量的作用域。<br>没想到，可以直接使用::vac++；来引用全局变量。<br>#include &lt;iostream&gt;<br>using namespace std;<br>int Vac=3;<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; int Vac=10;<br>&nbsp;&nbsp;&nbsp; ::Vac++;&nbsp;&nbsp; // <span style="FONT-SIZE: 10pt; COLOR: #0000ff">如果没有定义局部变量Vac，也是可以直接引用全局变量的。但是这里通过Vac只能引用到局部变量，要想引用全局变量，只能使用::Vac</span>，&nbsp;这些解读，都是由编译器来完成的吧...&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 10pt; COLOR: #0000ff">两个作用域不同的变量，虽然变量名相同，但并不是同一个变量<br></span>&nbsp;&nbsp;&nbsp; cout &lt;&lt; ::Vac &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; Vac &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br>输出时4 10<br><br>2、事后计算(或者说先返回值，之后的自增才生效?)<br>int i=1,j=2;<br>k = i+++j; <br>k的值是3，之后i的值是2.<br><br>3、<span style="COLOR: #ff0000">连乘<br></span>#include &lt;iostream&gt;<br>using namespace std;</p>
<p>int main()<br>{<br>&nbsp;int i = 3;<br>&nbsp;cout &lt;&lt; i++*i++ &lt;&lt; endl;&nbsp; // 开始把输出结果写成12了，第一个返回3，加法在之后生效，所以返回4，3*4=12，其实错了，<span style="FONT-SIZE: 10pt; COLOR: #0000ff">由于两个优先级相同，都是先返回3，乘法运算使用的是3*3，之后自增运算才生效</span>?<br>&nbsp;cout &lt;&lt; i &lt;&lt; endl;&nbsp; //输出的结果是5<br>}&nbsp; <br><br>4、编程风格。<br>if('A'==a) {<br>&nbsp;&nbsp;&nbsp; a++;<br>} // <span style="FONT-SIZE: 10pt; COLOR: #800080">这种编程风格要好些</span>。避免了把"=="误写为"="，<span style="FONT-SIZE: 10pt; COLOR: #800080">因为编译器不允许对常量赋值，就可以检查到错误</span>。</p>
if(a=='A') {<br>&nbsp;&nbsp;&nbsp; a++;<br>}<br><br>5、类型转换，原来unsigned int在 int之上。<br>-20从int转换为 unsigned int，值为11111111 11111111 11111111 <span style="FONT-SIZE: 10pt; COLOR: red">11101100</span>， 这里最后的数字不能搞错。全1实际上对应的值是-1，-20 = -1 -19，可以通过补码计算得到。。。<br>unsigned int a = 6;<br>int b = -20;<br>char c;<br>(a+b&gt;6)?c=1:c=0;<br>最后c的值是1，无符号数对于嵌入式系统更为重要。<span style="FONT-SIZE: 10pt; COLOR: #800080">即使是猜，可以得出c=1，详细分析过程不出错，则要要有清晰理解</span>。<br><br>6、C++程序中，<span style="FONT-SIZE: 10pt; COLOR: red">调用C编译器编译后的函数</span>，为什么要加extern "C"<br>extern "C" {} 是告诉编译器，括号里面的代码需要按照C的格式进行编译，<span style="FONT-SIZE: 10pt; COLOR: red">连接时要按C得命名规则去找</span>。<br>C++支持函数重载，C语言不支持函数重载。函数被C++编译器编译后在库中的名字与C语言的不同。假设某个函数的原型为:void foo(int x, int y)。该函数被C编译器编译后在库中的名字为_foo()，而C++编译器则会产生_foo_int_int之类的名称。<br>C++提供了<span style="COLOR: #800080">C连接交换指定符号</span> extern "C" <span style="FONT-SIZE: 10pt; COLOR: #ff0000">解决名字的匹配问题</span>。<br><span style="FONT-SIZE: 10pt; COLOR: #800080">由于C++支持重载，仅仅靠函数名还是不能确定函数的，还要根据参数列表</span>。<br><br>7、判定是C++编译器还是C编译器。<br>通过宏， __cplusplus和_STDC_<br><br>8、new和malloc的区别。 <span style="FONT-SIZE: 10pt; COLOR: #0000ff">2008-8-26 提问过，呵呵<br></span>C++中new和malloc，C中只有malloc。两者申请到的内存都在堆上。new申请到的内存要用delete释放，malloc申请的内存则要用free进行释放。<br>new是C++所特有的，为什么一定要有new呢?&nbsp; 每样语言机制的设计，都是有其存在理由的，当申请到一块内存，并需要做初始化时，new就发挥作用了，它可以调用构造函数的。 而这是C语言所不具备的特性。<br><br>9、int const&amp; max(int const&amp; a, int const&amp; b) 和int max(int a, int b) 有什么区别啊？ <span style="FONT-SIZE: 10pt; COLOR: #0000ff">2008-07-30 20:33:44提问过<br><span style="COLOR: #000000">前者的效率会高一些，特别当传入的参数，或者返回的参数是比较大的对象时。因为后者会拷贝复制临时变量。<br>中间提及了引用和指针的区别。<br>引用必须在定义时候初始化，引用一旦初始化就不能改变引用的对象</span></span> <br><br>10、无临时变量参数调换<br>用^异或操作更佳，如果两个数据较大，不会发生溢出<br><br>11、<span style="COLOR: red">内存泄露问题</span>。<br>下面代码直接退出会造成内存泄露吗?<br>struct A {<br>&nbsp;&nbsp;&nbsp;&nbsp; char* name;<br>}<br><br>main()<br>{<br>&nbsp;&nbsp;&nbsp; struct A test;<br>&nbsp;&nbsp;&nbsp; test.name = "name1";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // C的内存管理和C++是不同的，但是如果使用C++编译器，则使用相同的机制? <span style="FONT-SIZE: 10pt; COLOR: red">其实各个编译器，具体可能也有区别的</span>。<br>&nbsp;&nbsp;&nbsp; struct A *test2 = (struct A*)malloc(sizeof(struct a));&nbsp;&nbsp; // malloc分配的应该是堆上的空间吧，必须free掉吗?<br>&nbsp;&nbsp;&nbsp; test2.name = "name2";<br>}<br>091027 栈上是一定会释放掉的。<br><br>12、i++, ++i哪个性能高<br>++i&nbsp; <span style="FONT-SIZE: 10pt; COLOR: #0000ff"><strong>这个题目应该用滥了吧</strong></span>，ali研究院也在用，呵呵<br><br>13、生成临时对象的几种方式。<br>a、赋值 b、类型转换&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其他的呢?<br><br>14、 A a, b, c;&nbsp; a=b=c;&nbsp; 会有问题吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <span style="COLOR: #008000">其实这些是考虑对语言拐弯抹角处的掌握。。。</span><br>b=c如果返回类型不是A，会报错?&nbsp; X&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 10pt; COLOR: #ff0000"><strong>有可能也是错的，因为从其他类型自动转换成A类型还是有可能的</strong></span>。<br>b=c类型不是A，有可能会报错。因为没法转换成A类型。<br><br>
<img src ="http://www.cppblog.com/thinke365/aggbug/95380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/thinke365/" target="_blank">thinke365</a> 2009-09-05 16:58 <a href="http://www.cppblog.com/thinke365/articles/95380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>