??xml version="1.0" encoding="utf-8" standalone="yes"?>色婷婷久久综合中文久久蜜桃av,丁香狠狠色婷婷久久综合,中文字幕乱码久久午夜 http://www.shnenglu.com/gujiayue/zh-cn Tue, 06 May 2025 19:41:12 GMT Tue, 06 May 2025 19:41:12 GMT 60 好久不来cppblogQؓ(f)什么现在网站h气如此凋ӞNc++真的要灭亡了吗? http://www.shnenglu.com/gujiayue/archive/2016/05/28/213599.html古月 古月 Fri, 27 May 2016 17:48:00 GMT http://www.shnenglu.com/gujiayue/archive/2016/05/28/213599.html http://www.shnenglu.com/gujiayue/comments/213599.html http://www.shnenglu.com/gujiayue/archive/2016/05/28/213599.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/213599.html http://www.shnenglu.com/gujiayue/services/trackbacks/213599.html 好久没有来这|站了,Z么现在h气如此凋零了Q?br />每个分区一天下来都几乎没有人发表文章,看首늚排行榜每个月人气最旺的文章也只不过?000多点的点击量Q记得当q火爆的时候随便一个文章篏U下来都能有几千的点击量了?br />到底发生了什么?N说C++真的要灭亡了吗? ]]> 输入输出~冲区和的概念理解 http://www.shnenglu.com/gujiayue/archive/2016/05/27/213595.html古月 古月 Fri, 27 May 2016 08:10:00 GMT http://www.shnenglu.com/gujiayue/archive/2016/05/27/213595.html http://www.shnenglu.com/gujiayue/comments/213595.html http://www.shnenglu.com/gujiayue/archive/2016/05/27/213595.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/213595.html http://www.shnenglu.com/gujiayue/services/trackbacks/213595.html Q本文章关于~冲区概늚理解大部分取自:(x) http://developer.51cto.com/art/201107/277186.htmQ?/span>
快递的寄送过E:(x)
源地址Q商家的仓库Q?#8212;—中{圎ͼ快递公司的仓库Q?#8212;—目的圎ͼ买家Q?/span>
我们从淘宝商家买衣服Q商安过快递公司把商品送到我们手里的这个过E可以Ş象的解释下缓存区和流的这个概c(din)?/span>
1Q?nbsp;淘宝商家不会(x)亲自把商品给买家送过来的Q因h率太低了Q商家会(x)通过快递公司这个中转,然后快递公司再把东襉K给买家。淘宝商家就是在键盘上打字,买家是E序Q程序需要读取从键盘上的输入的字Q缓冲区是快递公司的仓库?/span>
2Q?nbsp;商品的几U位|状态:(x)商家仓库Q快递仓库,买家手中Q还有一U状态就是在路上。输入输出的就是指的在路上?/span>
3Q?nbsp;快递收货员收到商品放到自q中{仓库中。但是快递公司肯定等仓库中的商品U篏C定程度才开始派送。行~冲是遇到换行W时p为需要执?/span>I/O操作了?br />
一Q缓冲区的概?/span>
~冲区又可以UCؓ(f)~存。计机中的内存可以被认为是盘的缓存。当 cpud文g、执行程序时Q不?x)直接从盘中读取,而是先把文g~存到内存中Q然后再从内存中d?/span>
对于 C++E序来说Q当cM cinQ?/span>getcharq样的对象或者函数读取输入时Q不?x)直接直接读键盘上的输入Q而是q样的一个过E:(x) cin——输入~冲?#8212;—键盘。我们从键盘上输入的字符先存到缓冲区里面Q?/span>cin从缓冲区里面d输入。对于输出来_(d)E序的结果不?x)直接显C到屏幕上,而是先存攑ֈ~冲区,然后 cout把内容从~冲出到屏幕?/span>cin?/span>cout本质上都是对~冲Z的内容进行操作?/span>
如果没有~冲区就?x)大大降?/span>CPU的效率,因ؓ(f) cpu不得不一直等待用L(fng)输入Q而不能执行其他的操作Qh打字输入的速度再快Q也比不?/span>CPU的执行速度Qh在输入两个字W之间的间隔旉Q?/span>cpu完全可以d别的事情?/span>
~冲区分ZU全~冲、行~冲和不带缓册Ӏ?/span>
1、全~冲
在这U情况下Q当填满标准 I/O~存后才q行实际 I/O操作。全~冲的典型代表是对磁盘文件的d?/span>
2、行~冲
在这U情况下Q当在输入和输出中遇到换行符Ӟ执行真正?/span>I/O操作。这Ӟ我们输入的字W先存放在缓冲区Q等按下回R键换行时才进行实际的 I/O操作。典型代表是键盘输入数据?/span>
3、不带缓?/span>
也就是不q行~冲Q标准出错情?/span>stderr是典型代表,q得出错信息可以直接尽快地昄出来?/span>
~冲区的h指的是缓冲区的内容被清空hQ这也就意味着h之前pȝ?x)对~冲区内容进?/span>I/Od。下?/span>4U情况会(x)触发~冲区的hQ?/span>
~冲区满Ӟ
执行 flush语句Q?/span>
执行 endl语句Q?/span>
关闭文g?/span>
C/C++E序里面的缓冲区指的是ؓ(f)标准输入与标准输|的~冲区,如果我们不认为的讄的话Q系l会(x)自动的ؓ(f)标准输入与标准输入设|一个缓冲区Q这个缓冲区的大通常?/span>4Kb的大?/span>
ANSI C要求下列~存特征Q?/span>
(1) 当且仅当标准输入和标准输出ƈ不涉?qing)交互作用设备(键盘Q屏q)Ӟ它们才是全缓存的?/span> d文g的时候就是全~存?/span>
(2)标准出错决不?x)是全缓存的?/span>
(3)标准输入和输出涉?qing)交互作用设备时Q虽然没有明规定是不带~存的还是行~存的,但一般系l默认它们是行缓存的?/span>
因此我们l常要用的标准输入和输出Q?/span>stdin?/span>stdout?/span>stderr的缓存特征是Q?/span>stdin?/span>stdout是行~存Q?/span>stderr是无~存的?/span>cin?/span>cout都是从缓冲区d
二、流的概?/span>
是一个过E,一个动态的概念。可以把想象成水在水管中流动的q程Q想象成商品快递运送的q程?/span>Cin?/span>cout是执行这个过E的人?/span>
对于输入Q?/span>cin负责把输入缓冲区中的内容传递给E序Q?/span>
对于输出Q?/span>cout负责把输出缓冲区中的内容传递给屏幕?/span>
Cin?/span>cout把缓冲区的数据变成流Q然后搬q到相应的目的地?/span>Cin?/span>cout是个搬q工Q搬q的q程是?/span>
三、代码案?br /> W一D代码:(x)
int main() { string str; int i=0; while (cin >> str) { cout << str<<endl; cout << ++i << endl; } return 0; } E序执行q程中输入:(x)i love you 最l结果是Q?br /> i 1 love 2 you 3
执行q程中,E序q不?x)在每次输入一个空格时打Cơ,而在在完全输入一行字W串q摁下回车后Q才?x)打印。原因就是在我们输入回R之前的一行字W串都只是存攑ֈ了ؓ(f)标准输入分配的缓冲区中,q是一个行~冲区,在遇到换行符之前Q缓冲区不会(x)h也就不会(x)触发I/O操作Qcin也就没有在读取数据。输入回车后Qcin开始执行I/O操作Q读取缓冲区中的字符Q首先读取iQ然后遇CI格Q此ơ读取完成,执行循环。然后接着dloveQ又遇到了空|d完成Q执行@环。最后读取了you?br />W二D代码:(x)
int main() { char c; // W一ơ调用getchar()函数 // E序执行Ӟ(zhn)可以输入一串字Wƈ按下回R键,按下回R键后该函数才q回 c = getchar(); // 昄getchar()函数的返回?nbsp; cout << c << endl; // 暂停 system("PAUSE"); // 循环多次调用getchar()函数 // 每ơ调用getchar()函数的返回值显C出?nbsp; // 直到遇到回RW才l束 while ((c = getchar()) != '\n') { printf("%c", c); } // 暂停 system("PAUSE"); return 0; } 执行E序Q输入:(x)abcdefg,然后回R E序l果如下Q?br />a bcdefg
W一ơ执行到getcharӞ׃此时~冲区里面没有Q何内容,所以程序等待键盘的输入Q输入abcdefg后,然后输入回RQ触发了行缓冲的条gQ执行I/OQgetchar开始读取缓冲区的内容,׃此函数只d一个字W,所以读完字Wa后,dl束Q执行下面的语句Q将a打印到屏q。由于缓冲区中字W只被读取了1个字WaQ剩余的bcdefgq在~冲ZQ因此执行到while中的getcharӞ直接d~冲Z的内容,也就是依ơ读取bcdefgQ回车符也是~冲Z的一个字W,当读取完回R后,while循环l束?br />
]]>最q很火的50只狗Q有好狗有病狗,d断有几只病狗的的逻辑推理题目 http://www.shnenglu.com/gujiayue/archive/2014/07/02/207489.html古月 古月 Wed, 02 Jul 2014 08:06:00 GMT http://www.shnenglu.com/gujiayue/archive/2014/07/02/207489.html http://www.shnenglu.com/gujiayue/comments/207489.html http://www.shnenglu.com/gujiayue/archive/2014/07/02/207489.html#Feedback 11 http://www.shnenglu.com/gujiayue/comments/commentRss/207489.html http://www.shnenglu.com/gujiayue/services/trackbacks/207489.html 题目Q?/span>50人有50条狗Q有病狗。每个h只能看到其他人的狗(不能看到自己的狗Q,只有狗的Mh才能打死狗。相互不能交,不能通知狗的Mh。如果推断出自家狗是病狗Q就要枪毙,只能枪毙自家狗。第一天没有枪壎ͼW二天有一阉|声。请问有几只病狗Q?/span> 听说q是升初的考试题,q实在是太难了,怀疑那些出题的老师W一ơ看到这个题能不能做出来。这应该是离散数学中典型的逻辑分析题,我想除了专门修过L数学和少数天才外应该很少有h在规定时间内出{案Q反正我不出。下面的分析q程Q是我参考了|上的答案,再按照自q理解写出来的?br /> 其实我认个题之所以难Q我觉得是题目表辄不够清晰。理解这个问题首先有几个隐含的条件要搞明白?br />a ?/span>50只狗里面臛_?/span>1只病狗?br /> b 、病狗是一眼就能分辨出来的Q但是狗的主人无法观察判断自q狗是不是病狗?br /> c 、狗的主人推断出自己的狗是病狗后Q一定要在当天杀ȝQ在当天中的 0:00?/span>24:00M时候都行?/span> 从而还能得C?strong>推论 d Q如果病狗的Mh看到 N只病狗,那么好狗的主看到 N+1只病狗,也就是说病狗的主人看到的病狗的数量是实际病狗数量再减 1.
明确了上q的3个条件和1个结论,再去解答q个问题Q就?x)简单很多?nbsp;
1Q?nbsp;假设只有 1只病狗,所有h在观察完其他人的狗后Q那么根据推?/span>dQ病狗的Mh不会(x)看到病狗Q再Ҏ(gu)条g aQ从而能够推断出自己的狗是病狗,于是?x)在当?/span>24点之前杀死自q狗?/span>
2Q?nbsp;但是W一天没有枪壎ͼ说明臛_?/span>2只病狗(把这个结果当?strong>推论 e Q。于是从W二?/span>0:00开始,所有h都应该知道至有两只病狗。假讑֏?/span>2只病狗,Ҏ(gu)推论 dQ病狗的Mh只看?/span>1只病狗,说明剩下的那只没有看到的病狗是自己的狗Q于是在W二天可以从 0:00?/span>24:00选择M一个时间点杀死自q狗,W二天就?x)听到枪声?/span>
3Q?nbsp;l箋假设?/span>3只病狗的话。由Ҏ(gu)推论 dQ病狗的Mh能观察到 2只病狗,再根据推?/span>eQ所以无法判断自q狗是否ؓ(f)病狗Q所以在W二天不可能杀狗,也就不会(x)有枪壎ͼl合 1?/span>2Q答案ؓ(f) 2只狗?/span>
4Q?nbsp;把题目改一下,Ҏ(gu)是第三天听到枪声。第二天 0:00一刎ͼ大家都知道有 2只病狗了Q那么第二天一直到 24:00都没有枪声的话,说明每个人都看到臛_ 2只病狗。根据推?/span>dQ那么从W三?/span>0:00开始,每个Z(x)知道臛_?/span>3只病狗。假设也只有 3只病狗,那么病狗的主人只能看?/span>2只病狗,说明剩下的那只没有看到的病狗是自己的狗Q于是在W三天肯定要杀死自q狗,W三天就?x)有枪声?/span>
5Q?nbsp;以此cLQ第几天听到枪声Q就有几只狗?/span>
]]> 用数学来推导味逻辑题:(x)骑士与流氓问题?/title> http://www.shnenglu.com/gujiayue/archive/2012/09/26/192119.html古月 古月 Wed, 26 Sep 2012 10:06:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/09/26/192119.html http://www.shnenglu.com/gujiayue/comments/192119.html http://www.shnenglu.com/gujiayue/archive/2012/09/26/192119.html#Feedback 3 http://www.shnenglu.com/gujiayue/comments/commentRss/192119.html http://www.shnenglu.com/gujiayue/services/trackbacks/192119.html ?span style="color: red; ">L数学教l了我们一U用数学Ҏ(gu)来推DU逻辑题,使得q些问题的难度降低不?/span> 下面来看下《离散数学及(qing)其应用》第六版Q?.1章练?fn)题W?5题我的推导分析吧?br /> 一个小岛上住着两类人,一cL骑士Q一cL氓Q骑士只说真话,氓只说假话Q有AB两个人,Ҏ(gu)他们所说的话,判断AB各自是流氓还是骑士?br />a)A_(d)(x)我们之间臛_有一个是氓。B什么都没有?br />b)A_(d)(x)我们两个都是骑士。B_(d)(x)A是流氓?br />cQA_(d)(x)我是氓或者B是骑士。B什么都没说 dQ两个h都说Q我是骑?br />eQA_(d)(x)我们都是氓。B什么都没说?br /> 个h分析Q?br />首先Q定义命题p为A是骑士,!p代表A是流氓,q为B是骑士,!q为B是流?/strong> aQA说的内容可以用如下数学符可达:(x)Q?p ∨ !qQ?br /> 假设A是骑士,即p=1Q说明A说的内容为真Q即(!p ∨ !q)=1Q因为p=1推出!p=0Q所?q=1Q所有q=0Q即B为流氓。过E没有矛盾?br /> 保险赯Q再假设A是流氓,?p=1Q说明A说的内容为假Q即(!p ∨ !q)=0Q但?p=1Q所?!p ∨ !q)不可能ؓ(f)0Q所以有矛盾?br /> l果是A是骑士,B为流?br />bQA说的内容Q?p ∧ q)QB说的内容Q?p 假设A是骑士,即p=1Q说明A说的内容为真Q即(p ∧ q)=1Q推出q=1Q说明B也ؓ(f)骑士Q那B说的话ؓ(f)真,是?p=1Q即A为流氓,l论与条件矛盾,假设不对 假设A是流氓,?p=1Q说明A说的内容为假Q即(p ∧ q)=0Q此时q?q是1Q都W合。再从B说的话着手,因ؓ(f)!p=1Q所以B说的话是正确的,所以q=1QB是骑士,没有矛盾?br /> l果是A是流氓,B是骑?br />cQA说的内容Q?!p ∨ q) 假设A是骑士,即p=1Q说明A说的内容为真Q即(!p ∨ q)=1Q推出q=1Q即说明B也ؓ(f)骑士Q没有矛盾?br /> 假设A不是骑士Q即!p=1Q说明A说的内容为假Q即(!p ∨ q)=0Q但?p=1Q所以无?!p ∨ q)是不可能?的,所以矛?br /> l果俩h都是骑士 dQA说的内容Qp。B说的内容Qq 假设A是骑士,即p=1Q说明A说的内容为真Q即p=1Q与条g相符?br /> 假设A是流氓,?p=1Q说明A说的内容为假Q即p=0Q此时也与条件相W?br /> B的判断也一P所以结果是无法判断是骑士谁是流?br />eQA说的内容Q?!p ∧ !q) 假设A是骑士,即p=1Q说明A说的内容为真Q即(!p ∧ !q)=1Q因?p=0Q所以无论如?!p ∧ !q)是不可能?的,矛盾 假设A是流氓,?p=1Q说明A说都内容为假Q即(!p ∧ !q)=0Q说?q=0Q即B是骑士,没有矛盾 l果是A是流氓,B是骑?img src ="http://www.shnenglu.com/gujiayue/aggbug/192119.html" width = "1" height = "1" /> ]]> 逻辑推理Q在一?00条语句的列表中,Wn条语句是“在q个列表中,恰有n条语句ؓ(f)假”,可以得出什么结论? http://www.shnenglu.com/gujiayue/archive/2012/09/26/192084.html古月 古月 Wed, 26 Sep 2012 07:31:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/09/26/192084.html http://www.shnenglu.com/gujiayue/comments/192084.html http://www.shnenglu.com/gujiayue/archive/2012/09/26/192084.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/192084.html http://www.shnenglu.com/gujiayue/services/trackbacks/192084.html 《离散数学及(qing)其应用》第六版1.1l习(fn)题第43题的个h分析 题目Q在一?00条语句的列表中,Wn条语句是“在这个列表中Q恰有n条语句ؓ(f)?#8221;.......... aQ从q些语句中得Z么结?br /> b) 若第n条语句是”臛_有n条语句ؓ(f)?#8220;Q结论是什?br /> cQ假讑?9条语句,回答b {案|上都有Q我是给q分析q程Q(思\大概是:(x)如果q句话话为真Q推句话的内容ؓ(f)真,p句话的内容又能推出其余话的是不是为真Q再Ҏ(gu)其余话的内容来判断是不是矛盾?span style="color: red; ">主要是看这句话为真与这句话的内容ؓ(f)真是不是矛盾。分清这句话和这句话的内容,明了了Q?/span> aQp1Qp2,.....p100分别代表q个100条语句?br />假设p1为真Q根据p1的内容,既然只有1个语句ؓ(f)假了Q那后面?9条语句说的全不是只有1个ؓ(f)假,说明后面99条全为假。可既然后面99条全为假了,那说明这个列表有99条ؓ(f)假,但是p1说只?个ؓ(f)假,条g和结论相矛盾。所以假设不成立Q说明p1为假?br />同样的方法推断p2。假设p2为真Q根据p2内容Q后面的98条全是假的了Q再上p1已经为假了,说明列表里有99条ؓ(f)假,与p2内容矛盾。所以假设不成立Q说明p2也ؓ(f)假?br />同样推断出p3到p98也都是假的?br />再看p99Q假设p99为真Q首先前?8条已l证明ؓ(f)假的了,再根据p99的内?#8221;恰有99条ؓ(f)?#8220;Q还?条,说明p100肯定为假。而从p100的内?#8221;恰有100条语?#8220;来判断,p100也确实ؓ(f)假(因ؓ(f)p99为真的,所以p100的内Ҏ(gu)不对的)。这个由条g到结果是不矛盄。保险v见,再假设p99为假的,因ؓ(f)前面98个已l证明ؓ(f)假了Q而p99也假设ؓ(f)假了Q现在共?9条假的了Q再Ҏ(gu)p99的内容,说明p100也必Mؓ(f)假,因ؓ(f)如果p100为真的话Q那p99是真话了。如果p100也ؓ(f)假的话,那说明这个列表全部都为假了,可是q样又到底了p100的内Ҏ(gu)真的Q条件到l论矛盾。再ơ证明了p99为真 再看p100Q现在已?8都ؓ(f)假,p99为真Qp99既然为真Q那他的内容是一个事?#8221;恰有99条ؓ(f)?#8220;Q还?条,只能说明p100为假了,如果p100为假的话Q那么p100所陈述的内容就是假的,而事实也实说明p100的内容ؓ(f)假?br />所以最后的l果是:(x)除了p99Q其余全为假?/span> bQ这个要反过来推?br />先假设p100为真Q那p100的内容就是真?#8221;臛_?00条假“Q因为d?00条,说明全都为假Q可既然100条都是假Q那p100也是假的Q又矛盾了。表明p100应该为假的。(也可以从另外一个角度证明,p100的内?#8221;臛_?00条假“是真的,说明”臛_?9条?8条?条ؓ(f)?#8220;都是真的Q前?9条都为真的,那怎么q能臛_100条ؓ(f)假呢Q矛盾。表明p100为假Q?br />同样Ҏ(gu)推断p99Q假设p99为真Q由p99的内Ҏ(gu)断p1到p98都ؓ(f)真,而p1到p98都ؓ(f)真显然是与p99的内容不W合的,矛盾。表明p99为假?br />同样推断出p98到p51都ؓ(f)假的?br />再看p50Q假设p50为真Q由p50的内Ҏ(gu)断p1到p49也都为真Q说?0条ؓ(f)假的语句只能是p51到p100了,而事实上p51到p100也确实都为假Q不矛盾。表明p50应该为真。保险期_(d)我们再假设p50为假Q那说明p50的内?#8221;臛_50条语句ؓ(f)?#8220;是不对的Q可是p51到p100q?0条语句已l证明ؓ(f)假了Q矛盾。再ơ表明p50应该为真?br />接着看p49Q假设p49为真Q由p49的内Ҏ(gu)断p1到p48都ؓ(f)真,而p51到p100都ؓ(f)假,也论证了p49的内Ҏ(gu)没错的,没有矛盾。p49为真 同理推断出p48到p1也都为真?br />所以最后的l果是:(x)p1到p50为真Q其余ؓ(f)假?/span> cQ同h法推断出p99到p51为假 推断p50Q假设p50为真Q由其内Ҏ(gu)断出p1到p49都ؓ(f)真,一?9条语句,p1到p49为真Qp50也假设ؓ(f)真了Q只剩下49条语句根本凑不成50条ؓ(f)假了Q所以矛盾,p50为假。可是p50如果为假的,׃p51到p99q?9条已lؓ(f)假了Q再加上p50又ؓ(f)假,说明q个列表实臛_?0个ؓ(f)假,q样说明p50的内Ҏ(gu)对的Qp50应该是真的,再次矛盾。可见无论p50为真q是为假Q都矛盾?span style="color: red; ">说明q是个?zhn)论?/span> ]]> c++中explict关键字的说明和?/title> http://www.shnenglu.com/gujiayue/archive/2012/09/19/191270.html古月 古月 Wed, 19 Sep 2012 10:15:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/09/19/191270.html http://www.shnenglu.com/gujiayue/comments/191270.html http://www.shnenglu.com/gujiayue/archive/2012/09/19/191270.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/191270.html http://www.shnenglu.com/gujiayue/services/trackbacks/191270.html 先看下面q一个简单的代码?br /> 1 #include <iostream> 2 using namespace std; 3 class my 4 { 5 private : 6 int t; 7 public : 8 my(){}; 9 my( int i):t(i){}; 10 int get () 11 { 12 return t; 13 } 14 void print(my d) 15 { 16 cout<<d. get ()<<endl; 17 } 18 }; 19 20 int main() 21 { 22 my t; 23 int i=3; 24 t.print(i); 25 return 0; 26 } main函数中t.print(i);的调用,myc里面print函数接受的数据类型的myQ不是intQ但q段E序仍然能够正常q行Q是因ؓ(f)myc里面存在一个只有一个Ş参的构造函数?br /> 当在一个需要mycd对象的地方(比如print函数Q就需要一个mycd对象Q,但是如果却没有给一个mycd对象Q给了一个其他类型的对象Q比如intQ那么这个时候就?x)看q个cL没有定义一个只接受一个参数的构造函敎ͼ而且q个形参必须是intQ然后构造出一个mycd临时对象Q再把这个(f)时对象给需要mycd象的地方Q完成一U隐式的转换?/span>注意Q如果这个类有一个接受一个参数的构造函敎ͼ但是q个参数的类型比如是stringQ这个隐式{换肯定就不会(x)发生了,~译时会(x)提示错误?br /> MQ隐式{换会(x)发生在,本来需要一个这U类对象的时候,却给了一个其他的数据cdQ而且cM恰好有一个只接受一个这U数据类型参数的构造函敎ͼ׃(x)先调用这个构造函数生成一个(f)时对象,接着这临时对象用于需要这U类对象的地斏V?/span>但是很多时候,q种隐式转换?x)带来很大的ȝQ因此如果自己定义的cMQ有一个只接受一个参数的构造函敎ͼ 除非有一个好理由允许构造函数被用于隐式cd转换Q否?/span>那么p在这个构造函数前面加一个关键词 explicitQ表明不?x)发生隐式{换?/span> ]]> 再谈下声明、定义、初始化、赋值和extern http://www.shnenglu.com/gujiayue/archive/2012/06/07/177916.html古月 古月 Thu, 07 Jun 2012 07:41:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/06/07/177916.html http://www.shnenglu.com/gujiayue/comments/177916.html http://www.shnenglu.com/gujiayue/archive/2012/06/07/177916.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/177916.html http://www.shnenglu.com/gujiayue/services/trackbacks/177916.html 1. 声明、定义、初始化和赋值四个术语有着本质的不同,虽然有时候看h差不多甚臛_全一P但如果不搞清楚很Ҏ(gu)出现错误Q或者错了不知道怎么攏V?/span>
2. a: extern关键词用来表明这是一个声明:(x) extern int I;变量 i是一个声明?/span>声明前面一定要有一个关键字 extern Q没有这个关键词׃是一个声明?/span>
b: 没有 extern是一个定义,比如 int i=9Q是一个定义,特别要注意的?/span>int i; q也是一个定义?/span>
c: 初始化就是在变量定义时给变量一个初|所以初始化语句也一定是一个定义语句,但反q来׃对了Q因为类gQ?/span>int iQ就是定义,但没有初始化。特别要注意的是Q?/span>extern int i = 9 Q虽然有 extern 关键词,但是因ؓ(f)初始化了Q所以这也是一个定?/span>Q不是声明?/span>
d: 赋D句就单了Q赋D句是l一个已l定义的变量Q不这个变量有没有初始化)一个新倹{特别要注意的是Q?/span>要给赋值的变量必须已经定义q了Q仅仅声明是不行的?/span>
3. extern关键词除了表明这是一个声明以外,更重要的是表明:(x)所声明的变量的定义可能是在E序中其他文仉。如下代?br />
// file1.cpp #include <iostream>using namespace std;extern int i;// q是一个声明,告诉~译器变量i的定义有可能是在其他源文件中Q即使本文g中没有i的定义,你也不要报错?/span>void main() { extern int i;// 同样是对i的声明,作用与上面的声明完全一P说明声明可以存在多个Q实际上q两个声明只要Q意一个就可以了。但是两个声明语句如果一个都没有Q编译器׃(x)认ؓ(f)变量i没有定义Q会(x)报错?br /> i=0;// 赋D句,l变量i一个新|变量赋值前必须要已l定义了Q如果不存在file2文g中的定义语句Q虽然不?x)出现编译错误,但是链接会(x)有错?/span> cout<<i; }// file2.cpp int i;// 首先是一个定义,而且是一个没有初始化的定义(不过实际上全局变量i被默认初始化?Q,变量i被定义在file2源文件中
4. 一个程序中可能包括不只一个文Ӟ所有文件中同一个变量(其实主要说的全局变量Q必Ld只能定义一ơ,但是声明可以有无C。而且如果 文g A 中用到的变量的定义是在其他文件中Q那么在文g A 中用q个变量之前Q一定要加上一?/span>extern 声明语句Q告诉编译器我所用的q个变量有可能是在其他文仉
5. extern int i=9Q上面已l提到虽然有externQ但q也是一个定义,因ؓ(f)初始化了?span style="color: red; ">cM于这U有extern也有初始化的语句Q只能出现在全局作用域,如果出现在函数内部,q是错误的?/span>
6. Q{Q有关编译器的一个特点:(x) C~译器一般都属于按文件编译,是说编译时多个源文件自q译自qQ互不媄响,好像只有自己一个文件?/span>只要每个文g~译时没有出现错误,那么׃?x)发生编译时错误。但?/span>没有发生~译错误Qƈ不代表程序就没有错误Q因?x)发生链接错?/span>。比如下面这两个代码
// A.cpp int i;// q是变量i的定?/span> void main() { }// B.cpp int i;// q也是变量i的定?/span>
~译时两个文件A和B是相互不影响的,所以编译时不会(x)出现M错误Q但是这个程序是有问题的Q因为全局变量i是被定义了两ơ的Q所以链接时׃(x)报告cM于下面的错误Q?br /> B.obj : error LNK2005: "int i" (?i@@3HA ) already defined in A.obj
Debug/A.exe : fatal error LNK1169: one or more multiply defined symbols found
另外上面也提CQ编译时各个文g是相互不影响的,~译器是不会(x)认ؓ(f)在这个文件中没有定义的变量其实很有可能h家是个全局变量Q在其他文g中定义了Q这p报错。解x法就是用 extern声明一个变量,告诉~译器h家这个变量不是没有定义,只是在其他文件中定义?/span>Q你别报错了?/span>
]]> 新学到的有关cin输入的特点、用?/title> http://www.shnenglu.com/gujiayue/archive/2012/05/28/cin.html古月 古月 Sun, 27 May 2012 16:20:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/05/28/cin.html http://www.shnenglu.com/gujiayue/comments/176424.html http://www.shnenglu.com/gujiayue/archive/2012/05/28/cin.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/176424.html http://www.shnenglu.com/gujiayue/services/trackbacks/176424.html #include <iostream>using namespace std;void main() { double val; char ch0,ch1; cin>>val; cout<<val<<endl; cin>>ch0; cout<<ch0<<endl; cin>>ch1; cout<<ch1<<endl; } cin输入用法之前学的不认真Q忽略到了?br />q段代码很简单,开始第一个输入的时候,比如直接输入Q?23ab。最后的l果是把123l了valQal了ch0,bl了ch1?br />也就是说Q当cinl一个doubleӞq时如果你的输入?23abQ不是单U的一个数字时Q那么将只是把输入的数字部分123ldoubleQ?span style="color: red; ">但是剩下的ab不是单的遗弃?/strong>Q而是l箋留在输入中Q等待下一ơ出现cin再把abl到下一个要从输入流得到值的变量?/div> ]]> 鄙hq辈子编写的W一个游戏程序:(x)猜拳Q?好激动,׃n下c++源代?/title> http://www.shnenglu.com/gujiayue/archive/2012/01/13/164145.html古月 古月 Fri, 13 Jan 2012 14:30:00 GMT http://www.shnenglu.com/gujiayue/archive/2012/01/13/164145.html http://www.shnenglu.com/gujiayue/comments/164145.html http://www.shnenglu.com/gujiayue/archive/2012/01/13/164145.html#Feedback 7 http://www.shnenglu.com/gujiayue/comments/commentRss/164145.html http://www.shnenglu.com/gujiayue/services/trackbacks/164145.html 阅读全文 ]]> 字符串操作函C的参数问?/title> http://www.shnenglu.com/gujiayue/archive/2011/12/25/162780.html古月 古月 Sun, 25 Dec 2011 08:25:00 GMT http://www.shnenglu.com/gujiayue/archive/2011/12/25/162780.html http://www.shnenglu.com/gujiayue/comments/162780.html http://www.shnenglu.com/gujiayue/archive/2011/12/25/162780.html#Feedback 0 http://www.shnenglu.com/gujiayue/comments/commentRss/162780.html http://www.shnenglu.com/gujiayue/services/trackbacks/162780.html q个首先先解释下一个很基础但是却很重要又常常容易搞L(fng)问题?br />char a[]和char*的区别?br />《c语言E序设计》(中文版)的解释挺不错的,我再大概说一下?br />.............................. char ame[] = "nw is the time"; char *pme = "now is the time"; 首先说pme是把一个指向该字符数组的指针赋值给pme.q个q程没有涉及(qing)到字W串的复Ӟ只是有指针的操作。pme首先是一个指针,q个指针指向一个字W串帔RQ这个指针此后可以被修改为指向其它字W串Q但是如果修改字W串本n的内容,l果是未定义的。ame是一个存攑ֈ始化字符串和I字W的一l数l,数组中的单个字符都是可以被修改的Q但是ame是个地址帔RQ是不可以被修改的,它始l指向这一个字W串?br /> string.h中定义了很多字符串操作函敎ͼ比如strncatQ这些函数至都有两个参敎ͼW一个参数是目的字符ԌW二个参数是源字W串?br />关于q个参数的类型到底用哪种Q?strong style="color: #ff0000; font-size: 14pt">要看相关的参数内容在函数执行完以后是不是?x)发生改变。如果参数内容发生改变了p用char[]Q如果参数的内容不发生改变则两个都可以用?/strong> 比如strncatQs,ct,n)Q函数的作用是把ct的前n个字W连接到s的后面,最后补上一个空字符。那么显然执行完以后s的内Ҏ(gu)变化了的Q所以定义s是必Lchar s[80]Q不能是char *sQ对于ct来说内容没有发生变化Q怎么定义都可以了?/div> ]]>
ŷþƷ |
Ʒ91þþþþþa |
ɫۺϾþ |
þþ |
99þþƷձһ |
þþƷƷëƬ |
Ʒ˾þþþþþ |
69ƷþþþAPP
|
þùҹAVӰԺ |
þƵ |
þˬˬˬ˾þþ |
99þһ |
þþþþþòҰ¸߳ |
91þùۺϾƷ |
þþùƷ |
ۺϾþü |
99Ʒ99þþþþ97 |
þþƷɫ鶹 |
þþþ99ƷƬֱ |
˳ɵӰվþ |
ھƷþþþþòӰԺ |
99ƷȾþ |
þþþѾƷ |
˾þþƷ99 |
þþƷ˹ҹ |
þùŷպƷ |
þþþþþ |
Ʒþˬ |
˳վþ99ȹ
|
þþƷav鶹ѿ |
þ99Ʒŷ |
þĻȫ
|
AAƬѿƵþ |
þþþƷһ
|
ݲݾþþר |
˾þ91 |
һaƬþëƬ |
ƷѾþ |
һAVվþþƷ˵AV
|
˾þۺ |
99þþƷѹۿ |