最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中需要注意的細(xì)節(jié)你知道嗎

 更新時(shí)間:2021年09月18日 10:15:28   作者:睡不飽的小默  
這篇文章主要介紹了C++ 需要注意的幾點(diǎn)細(xì)節(jié),幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助

namespace的使用

#include <iostream>
using namespace std;
//定義命名空間
namespace NameSpaceA
{
    int a = 0;
}
namespace NameSpaceB
{
    int a=1;
    namespace NameSpaceC
    {
        struct Teacher
        {
            /* data */
            char name[10];
            int age;
        };
    }
}
int main()
{
    //using namespace NameSpaceA;
    using NameSpaceB::NameSpaceC::Teacher;
    using namespace NameSpaceB;
    printf("a = %d \n",a);
    printf("a = %d \n",NameSpaceA::a);
    Teacher t1;
    t1.age = 20;
    printf("age: %d \n",t1.age);
    return 0;
}

const使用:

//C++編譯器對(duì)const常量的處理
//當(dāng)看見(jiàn)常量聲明時(shí),會(huì)在符號(hào)表中放入常量-->當(dāng)要使用時(shí),直接取符號(hào)表中的值替換
//C中的const變量是個(gè)只讀變量,但自己的存儲(chǔ)空間
//C++中-->const為全局或&時(shí)才會(huì)分配空間
//#define和const相同之處:C++中的const修飾,是一個(gè)真正的常量,而C中只是個(gè)只讀變量。const修飾的常量在編譯期間就確定了。
//#define與const不同之處:#define-->由預(yù)處理器處理,單純的文本替換
//                       const---->編譯器處理,提供類型檢查和作用域檢查
#include <iostream>
using namespace std;
void fun1()
{
    #define a 10
    const int b = 20;
}
void fun2()
{
    printf("%d\n",a);
    //cout<<b<<endl;
}
int main()
{
    //int &a = 20;
    const int &b = 30;   //直接取符號(hào)表中的值代替,當(dāng)使用&或者extern時(shí)會(huì)給常量分配內(nèi)存空間
    fun1();
    fun2();
    getchar();
    return 0;
}

引用

//引用的本質(zhì):
//          1 引用在C++內(nèi)部實(shí)現(xiàn)是一個(gè)常指針   Type &name --> Type * const name
//          2 C++編譯器在編譯過(guò)程中使用常指針作為引用的內(nèi)部實(shí)現(xiàn).因此所占用的空間與指針一樣大 4
//          3 C++為引用的使用做了細(xì)節(jié)隱藏
/*
    函數(shù)返回值是引用:
           1  難點(diǎn)注意:要觀察返回的變量是在哪里分配內(nèi)存空間的--->如果是臨時(shí)變量,即在棧上分配內(nèi)存,函數(shù)返回時(shí)會(huì)被析構(gòu)(釋放)
                            --> 不能作為左值使用,因?yàn)榭臻g被釋放了。沒(méi)地方存了
                            --> 不能成為其它引用的初始值,空間被釋放了
           2  c++鏈?zhǔn)骄幊叹幊?、操作符重載
*/
/*
    指針的引用-->只不過(guò)是為存儲(chǔ)指針的這塊內(nèi)存取了個(gè)別名而已
*/
#include <iostream>
using namespace std;
//證明引用有自己的內(nèi)存空間
struct  Teacher
{
    /* data */
    int &a;
    int &b;
};
int main2()
{
    printf("sizeof(Teacher):%d \n",sizeof(Teacher));  //8-->int const *a and int const *b
    return 0;
}
int main1()
{
    int a   =  10;
    int &b  = a;
    printf("&a:%d\n",&a);
    printf("&b:%d\n",&b);  
    //對(duì)同一內(nèi)存空間可以取好幾個(gè)名字嗎?    -->   不行
    //實(shí)際上:int const *b = &a     &b:編譯器會(huì)幫我們做 *(&b) 
    return 0;
}
//引用做函數(shù)返回值
int f1()
{
    int a;
    a = 10;
    return a;
}
int &f2()
{
    int a;
    a = 20;
    return a;
}
int *f3()
{
    int a;
    a = 30;
    return &a;
}
//---> 害,其實(shí)就一句話,看內(nèi)存有沒(méi)有被釋放而已
//static + &引用
int j()             //-->返回的只是一個(gè)數(shù)值而已
{
    static int a = 10;
    a++;
    printf("a:%d \n",a);
    return a;
}
int &j2()           //返回 *(&a)
{
    static int a = 20;
    a++;
    printf("a:%d \n",a);
    return a;
}
int *j3()           //->返回的是一個(gè)地址
{
    static int a = 30;
    a++;
    printf("a:%d \n",a);
    return &a;
}
int main33()
{
    //j()-->返回的是一個(gè)數(shù)值,不能當(dāng)左值  11 = 100(err)
    j2() = 100;
    j2();
    //手工打造引用條件
    *(j3()) = 100;
    j3();
    getchar();
    return 0;
}
//非基礎(chǔ)類型:可能設(shè)計(jì)到深拷貝和淺拷貝的問(wèn)題-->其實(shí)也就是有沒(méi)有內(nèi)存空間的問(wèn)題
struct Student
{
    int  age;
};
Student & Op(Student &s)
{
    /* data */
    s.age = 30;
}
int main44()
{
    Student s1;
    s1.age = 20;
    Op(s1);
    cout<<s1.age;
    return 0;
}
//常引用-->const難點(diǎn)
int main55()
{
    int a = 10;
    const int &b = a;   //const char const* b = xxxx ---> 但a可以改變
   // b = 11;   
    a = 20;
    int *p = (int *)&b;
    //
    const int aa = 20;
    const int &bb = aa;
    //int &b = aa;
}
//const:常量 pk 變量 -->const int *const  p
int main()
{
    const int b =10;
    printf("&b:%d \n",&b);
    const int &bb = 19;
    printf("&bb:%d \n",&bb);
    getchar();
    return 0;
}

三目運(yùn)算

//在C++中,三目運(yùn)算返回變量本身,可以做左值
#include <iostream>
using namespace std;
int main()
{
    int a = 20;
    int b = 30;
    a = (a<b?a:b) = 30;
    cout<<a<<endl;
    getchar();
    return 0;
}

函數(shù)相關(guān)

#include <iostream>
using namespace std;
/*
    第一部分:inline函數(shù)
        1.內(nèi)聯(lián)函數(shù)聲明時(shí)inline關(guān)鍵字必須和函數(shù)定義結(jié)合在一起,否則編譯器會(huì)直接忽略請(qǐng)求
        2.內(nèi)聯(lián)函數(shù)是一種特殊的函數(shù),具有普通函數(shù)的特征(參數(shù)檢查,返回類型等)
            -->相對(duì)于普通的函數(shù)而言,內(nèi)聯(lián)函數(shù)省去了壓棧、跳轉(zhuǎn)、返回的開銷
        3.內(nèi)聯(lián)函數(shù)由編譯器處理,然后將編譯后的函數(shù)體直接插入調(diào)用的地方
          宏定義-->預(yù)處理器處理,進(jìn)行簡(jiǎn)單的文本替換,沒(méi)有任何編譯過(guò)程
*/
#define  MYFUNC(a,b)    ((a)<(b)?(a):(b))   //預(yù)處理階段,簡(jiǎn)單的文本替換
inline int func(int a , int b)      //經(jīng)歷編譯過(guò)程
{
    return a<b?a:b;
}
int main01()
{
    int a = 1;
    int b = 3;
    int c =func(++a,b);
    cout<<c;    //2
    int d = MYFUNC(++a,b);
    cout<<d<<"  ";  //3
    getchar();
    return 0;
}
/*
    第二部分:函數(shù)的占位參數(shù):
            占位參數(shù)只有參數(shù)類型聲明,而沒(méi)有參數(shù)名聲明
            一般情況下,函數(shù)內(nèi)部無(wú)法使用占位參數(shù)
*/
int f(int a , int b , int)
{
    return a+b;
}
int main02()
{
    // int c = f(1,2);
    //cout<<c<<"  ";
    int d = f(1,2,3);
    cout<<d;
    getchar();
    return 0;
}
//默認(rèn)參數(shù)和占位參數(shù)一起使用-->可以方便程序的擴(kuò)展
int f2(int a,int b,int = 0)
{
    return a+b;
}
int main022()
{
    f2(1,2);
    f2(1,2,3);
    getchar();
    return 0;
}
/*
    第三部分:
        函數(shù)重載-->參數(shù)個(gè)數(shù)不同 、 參數(shù)類型不同 、 參數(shù)順序不同
        編譯器調(diào)用重載函數(shù)的準(zhǔn)則:
                將所有同名函數(shù)作為候選者
                嘗試尋找可行的候選者
                精確匹配實(shí)參
        匹配失敗:
                找到的可行函數(shù)不唯一,出現(xiàn)二義性,編譯失敗
                沒(méi)有找到可行的函數(shù)
        注意事項(xiàng):
                重載函數(shù)在本質(zhì)上是不同的函數(shù),是相互獨(dú)立的(靜態(tài)鏈編)
                函數(shù)重載是發(fā)生在同一個(gè)類里面的
*/
//函數(shù)重載遇上函數(shù)指針
int g(int x)
{
    return x;
}
int g(int a ,int b)
{
    return a+b;
}
typedef int(*PFUNC)(int);
int main()
{
    int c = 0;
    PFUNC p = g;
    c = p(1);
    cout<<c<<endl;
    getchar();
    return 0;
}
//register-->暗示編譯程序相應(yīng)的變量將被頻繁的使用,如果可能的話,應(yīng)該將其放到CPU的寄存器中,加快訪問(wèn)速度
//減少了去內(nèi)存中尋址、取值
// #ifdef NOSTRUTASSIGN
//     memcpy (d , s , l)
//     {
//         register char *d;
//         register char *s;
//         register int  l;
//         while (l--)
//         {
//             *d++ = *s++;
//         }
//     }
// #endif

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    C語(yǔ)言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    猜數(shù)字是興起于英國(guó)的益智類小游戲,起源于20世紀(jì)中期,一般由兩個(gè)人或多人玩,也可以由一個(gè)人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來(lái)用這個(gè)游戲案例理解數(shù)據(jù)結(jié)構(gòu)
    2022-04-04
  • 使用boost讀取XML文件詳細(xì)介紹

    使用boost讀取XML文件詳細(xì)介紹

    這篇文章主要介紹了使用boost讀取XML文件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • C++中訪問(wèn)字符串的三種方法總結(jié)

    C++中訪問(wèn)字符串的三種方法總結(jié)

    以下是對(duì)C++中訪問(wèn)字符串的三種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • 利用QT設(shè)計(jì)秒表功能

    利用QT設(shè)計(jì)秒表功能

    這篇文章主要為大家詳細(xì)介紹了利用QT設(shè)計(jì)秒表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++通過(guò)msxml調(diào)用webservice示例分享

    C++通過(guò)msxml調(diào)用webservice示例分享

    這篇文章主要介紹了C++通過(guò)msxml調(diào)用webservice示例分享,需要的朋友可以參考下
    2014-03-03
  • C++實(shí)現(xiàn)LeetCode(46.全排列)

    C++實(shí)現(xiàn)LeetCode(46.全排列)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(46.全排列),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中的覆蓋和隱藏詳解

    C++中的覆蓋和隱藏詳解

    這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • C++實(shí)現(xiàn)八皇后問(wèn)題的方法

    C++實(shí)現(xiàn)八皇后問(wèn)題的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)八皇后問(wèn)題的方法,是數(shù)據(jù)結(jié)構(gòu)與算法中常見(jiàn)的一個(gè)經(jīng)典算法,需要的朋友可以參考下
    2014-09-09
  • 淺談Qt信號(hào)槽與事件循環(huán)的關(guān)系

    淺談Qt信號(hào)槽與事件循環(huán)的關(guān)系

    本文主要介紹了Qt信號(hào)槽與事件循環(huán)的關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++棧實(shí)現(xiàn)逆波蘭式的應(yīng)用

    C++棧實(shí)現(xiàn)逆波蘭式的應(yīng)用

    逆波蘭式指的是操作符在其所控制的操作數(shù)后面的表達(dá)式。本文主要介紹了C++棧實(shí)現(xiàn)逆波蘭式的應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

花垣县| 通山县| 丰原市| 巴林右旗| 永城市| 夏邑县| 潼关县| 宜宾市| 通州区| 永和县| 于都县| 福安市| 北安市| 鲜城| 扎囊县| 万源市| 岑巩县| 广安市| 界首市| 句容市| 工布江达县| 陕西省| 郑州市| 轮台县| 磴口县| 五大连池市| 永州市| 平果县| 元氏县| 理塘县| 宝兴县| 西青区| 托里县| 离岛区| 桂东县| 大荔县| 潞西市| 井冈山市| 巴东县| 南皮县| 项城市|