【No.7 C++对象的构造与析构时间】
生活随笔
收集整理的這篇文章主要介紹了
【No.7 C++对象的构造与析构时间】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
==【注意】==
程序語言只是我們與計(jì)算機(jī)交流并讓計(jì)算機(jī)實(shí)現(xiàn)我們創(chuàng)造性思想的工具,可以并鼓勵(lì)深入掌握一門語言,但千萬別沉迷于鉆某種語言的牛角尖,一定要把握好二者間的度
本帖屬不定時(shí)連載貼,以試卷的形式提出一個(gè)比較基礎(chǔ)的問題供大家思考討論,問題的解析將在下一更新貼中一并給出,這樣做是希望還不清楚問題的朋友有自己思考和討論的時(shí)間,希望大家能從這些帖子中有所收獲。
貼中問題屬我在學(xué)習(xí)C\C++過程中遇到的一些語法或者比較隱晦的程序問題,其中有自己的總結(jié),也不乏網(wǎng)絡(luò)上搜索到的經(jīng)典解析,在此分享給大家,希望能起到拋磚引玉的作用
我已認(rèn)真檢查過自己的帖子,但難免有疏忽,如大家在閱讀過程中仍發(fā)現(xiàn)有問題,請(qǐng)及時(shí)通知,我會(huì)及時(shí)更正,以免誤導(dǎo)大家,萬分感謝^_^
【No.7??C++對(duì)象的構(gòu)造與析構(gòu)時(shí)間】
由于連載形式,每帖第二部分都配有上一問題的解答。為了保持帖子的針對(duì)性和一致性,此貼僅供交流討論本次問題,若大家對(duì)上一問題有任何疑問,請(qǐng)通過解答末尾的傳送鏈接前往該問題貼回復(fù)討論
[問題No.7]
請(qǐng)寫出以下代碼的執(zhí)行結(jié)果 復(fù)制內(nèi)容到剪貼板
using namespace std;
//-------------------------------------------------
class Foo
{
??public:
? ? Foo(void)
? ? {
? ?? ?cout<<"constructing..."<<endl;
? ?? ?++_counter;
? ? }
? ? Foo(const Foo &p)
? ? {
? ?? ?cout<<"copy constructor..."<<endl;
? ?? ?++_counter;
? ? }
? ? ~Foo(void){ cout<<"destructing..."<<endl; }
??
??public:
? ? static int _counter;
};
int Foo::_counter = 0;
//---------------------------------------------
Foo global;
Foo Trap(Foo foo)
{
??Foo local = foo;
??Foo *heap = new Foo(global);
??*heap = local;
??Foo pa[4] = { local, *heap };
??return *heap;
}
int main(int argc, char **argv)
{
??Foo p;
??Trap(p);
??cout<<Foo::_counter<<endl;
??return EXIT_SUCCESS;
}
No.6 switch的陷阱淺析 輸出結(jié)果
0
問題淺析
本題出錯(cuò),大多是由于初學(xué)者自己主觀臆斷switch-case塊的執(zhí)行方式,此題中,i == 1,有的午飯就主觀地認(rèn)為case 1:分支被執(zhí)行,x = 5,然后輸出為5.但是,switch-case語句的陷阱就在這里,case分支不是if-else這樣的非此即彼的判斷語句,case只是一個(gè)入口,i == 1時(shí),找到入口case 1:,因此執(zhí)行這個(gè)入口之后的所有語句,直到swtich語句塊結(jié)束。
那么如何杜絕此問題的發(fā)生呢?見如下代碼
復(fù)制內(nèi)容到剪貼板
{
??case 1: x = 5; break;
??case 2: ++x; break;
??case 3: ++x; break;
??default: break;
}
程序語言只是我們與計(jì)算機(jī)交流并讓計(jì)算機(jī)實(shí)現(xiàn)我們創(chuàng)造性思想的工具,可以并鼓勵(lì)深入掌握一門語言,但千萬別沉迷于鉆某種語言的牛角尖,一定要把握好二者間的度
本帖屬不定時(shí)連載貼,以試卷的形式提出一個(gè)比較基礎(chǔ)的問題供大家思考討論,問題的解析將在下一更新貼中一并給出,這樣做是希望還不清楚問題的朋友有自己思考和討論的時(shí)間,希望大家能從這些帖子中有所收獲。
貼中問題屬我在學(xué)習(xí)C\C++過程中遇到的一些語法或者比較隱晦的程序問題,其中有自己的總結(jié),也不乏網(wǎng)絡(luò)上搜索到的經(jīng)典解析,在此分享給大家,希望能起到拋磚引玉的作用
我已認(rèn)真檢查過自己的帖子,但難免有疏忽,如大家在閱讀過程中仍發(fā)現(xiàn)有問題,請(qǐng)及時(shí)通知,我會(huì)及時(shí)更正,以免誤導(dǎo)大家,萬分感謝^_^
【No.7??C++對(duì)象的構(gòu)造與析構(gòu)時(shí)間】
由于連載形式,每帖第二部分都配有上一問題的解答。為了保持帖子的針對(duì)性和一致性,此貼僅供交流討論本次問題,若大家對(duì)上一問題有任何疑問,請(qǐng)通過解答末尾的傳送鏈接前往該問題貼回復(fù)討論
[問題No.7]
請(qǐng)寫出以下代碼的執(zhí)行結(jié)果 復(fù)制內(nèi)容到剪貼板
代碼:
#include<iostream>using namespace std;
//-------------------------------------------------
class Foo
{
??public:
? ? Foo(void)
? ? {
? ?? ?cout<<"constructing..."<<endl;
? ?? ?++_counter;
? ? }
? ? Foo(const Foo &p)
? ? {
? ?? ?cout<<"copy constructor..."<<endl;
? ?? ?++_counter;
? ? }
? ? ~Foo(void){ cout<<"destructing..."<<endl; }
??
??public:
? ? static int _counter;
};
int Foo::_counter = 0;
//---------------------------------------------
Foo global;
Foo Trap(Foo foo)
{
??Foo local = foo;
??Foo *heap = new Foo(global);
??*heap = local;
??Foo pa[4] = { local, *heap };
??return *heap;
}
int main(int argc, char **argv)
{
??Foo p;
??Trap(p);
??cout<<Foo::_counter<<endl;
??return EXIT_SUCCESS;
}
No.6 switch的陷阱淺析 輸出結(jié)果
0
問題淺析
本題出錯(cuò),大多是由于初學(xué)者自己主觀臆斷switch-case塊的執(zhí)行方式,此題中,i == 1,有的午飯就主觀地認(rèn)為case 1:分支被執(zhí)行,x = 5,然后輸出為5.但是,switch-case語句的陷阱就在這里,case分支不是if-else這樣的非此即彼的判斷語句,case只是一個(gè)入口,i == 1時(shí),找到入口case 1:,因此執(zhí)行這個(gè)入口之后的所有語句,直到swtich語句塊結(jié)束。
那么如何杜絕此問題的發(fā)生呢?見如下代碼
復(fù)制內(nèi)容到剪貼板
代碼:
swtich(i){
??case 1: x = 5; break;
??case 2: ++x; break;
??case 3: ++x; break;
??default: break;
}
只要執(zhí)行了一條分支語句就break出switch語句塊,這樣就實(shí)現(xiàn)了我們之前臆斷的程序功能,并且,如果不是有意要執(zhí)行多個(gè)case分支,請(qǐng)時(shí)刻記住,每一個(gè)case分支(包括default)后都應(yīng)該填上break語句,并且不管你有沒有必要寫default分支,也請(qǐng)寫上,并break,這樣做是是程序的可讀性得到保障, 以免別的程序員誤以為你忘記了default情況的處理。
? ? ?本文轉(zhuǎn)自Bill_Hoo 51CTO博客,原文鏈接:http://blog.51cto.com/billhoo/733265,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的【No.7 C++对象的构造与析构时间】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片压缩上传Thumbnailator
- 下一篇: Rabbitmq~对Vhost的配置