欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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)看見常量聲明時(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++編譯器在編譯過程中使用常指針作為引用的內(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被釋放了。沒地方存了
                            --> 不能成為其它引用的初始值,空間被釋放了
           2  c++鏈?zhǔn)骄幊叹幊獭⒉僮鞣剌d
*/
/*
    指針的引用-->只不過是為存儲(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)存有沒有被釋放而已
//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ì)到深拷貝和淺拷貝的問題-->其實(shí)也就是有沒有內(nèi)存空間的問題
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)行簡單的文本替換,沒有任何編譯過程
*/
#define  MYFUNC(a,b)    ((a)<(b)?(a):(b))   //預(yù)處理階段,簡單的文本替換
inline int func(int a , int b)      //經(jīng)歷編譯過程
{
    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ù)類型聲明,而沒有參數(shù)名聲明
            一般情況下,函數(shù)內(nèi)部無法使用占位參數(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)二義性,編譯失敗
                沒有找到可行的函數(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的寄存器中,加快訪問速度
//減少了去內(nèi)存中尋址、取值
// #ifdef NOSTRUTASSIGN
//     memcpy (d , s , l)
//     {
//         register char *d;
//         register char *s;
//         register int  l;
//         while (l--)
//         {
//             *d++ = *s++;
//         }
//     }
// #endif

總結(jié)

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

相關(guān)文章

  • C++單例設(shè)計(jì)模式詳細(xì)講解

    C++單例設(shè)計(jì)模式詳細(xì)講解

    單例模式(Singleton Pattern)是最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建
    2022-06-06
  • C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式

    C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式

    這篇文章主要介紹了C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++ 寫的UrlEncode和UrlDecode實(shí)例

    C++ 寫的UrlEncode和UrlDecode實(shí)例

    這篇文章主要介紹了C++ 寫的UrlEncode和UrlDecode實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++實(shí)現(xiàn)簡單的計(jì)算器功能

    C++實(shí)現(xiàn)簡單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 二叉樹先根(先序)遍歷的改進(jìn)

    二叉樹先根(先序)遍歷的改進(jìn)

    這篇文章主要介紹了二叉樹先根(先序)遍歷的改進(jìn),有需要的朋友可以參考一下
    2014-01-01
  • C語言中 int main(int argc,char *argv[])的兩個(gè)參數(shù)詳解

    C語言中 int main(int argc,char *argv[])的兩個(gè)參數(shù)詳解

    這篇文章主要介紹了C語言中 int main(int argc,char *argv[])的兩個(gè)參數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C++?set的使用示例詳解

    C++?set的使用示例詳解

    序列式容器如vector、list等存儲(chǔ)數(shù)據(jù)的邏輯結(jié)構(gòu)為線性序列,元素的存儲(chǔ)和訪問是按位置順序進(jìn)行的,而關(guān)聯(lián)式容器如set、map等,本文給大家介紹C++?set的使用示例詳解,感興趣的朋友一起看看吧
    2024-10-10
  • 你知道C語言中#和##表示的意義嗎

    你知道C語言中#和##表示的意義嗎

    如標(biāo)題,這篇文章會(huì)講解C語言中的#和##是啥意思。我相信,大部分朋友應(yīng)該都沒怎么用過,這兩個(gè)玩意的使用條件也相當(dāng)苛刻,快跟隨小編一起來看看吧
    2023-04-04
  • C++類與對(duì)象的基礎(chǔ)知識(shí)點(diǎn)詳細(xì)分析

    C++類與對(duì)象的基礎(chǔ)知識(shí)點(diǎn)詳細(xì)分析

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2023-02-02

最新評(píng)論