• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Bjarne Stroustrup的FAQ:C++的風格與技巧

    發布: 2008-4-23 15:44 | 作者: 不詳 | 來源: www.wushuang.net | 查看: 121次 | 進入軟件測試論壇討論

    領測軟件測試網


    Sizeof不能夠被重載是因為內建的操作(built-in operations),諸如對一個指向數組的指針進行增量操作,必須依靠它?紤]一下:

    X a[10];
    X* p = &a[3];
    X* q = &a[3];
    p++; // p指向a[4]
    // 那么p的整型值必須比q的整型值大出一個sizeof(X)

    所以,sizeof(X)不能由程序員來賦予一個不同的新意義,以免違反基本的語法。

    在N::m中,無論N還是m都不是值的表達式;N和m是編譯器知道的名字,::執行一個(編譯期的)范圍解析,而不是表達式求值。你可以想象一下,允許重載x::y的話,x可能是一個對象而不是一個名字空間(namespace)或者一個類,這樣就會導致——與原來的表現相反——產生新的語法(允許 表達式1::表達式2)。很明顯,這種復雜性不會帶來任何好處。

    理論上來說,.(點運算符)可以通過使用和->一樣的技術來進行重載。但是,這樣做會導致一個問題,那就是無法確定操作的是重載了.的對象呢,還是通過.引用的一個對象。例如:


    class Y {
    public:
    void f();
    // ...
    };

    class X { // 假設你能重載.
    Y* p;
    Y& operator.() { return *p; }
    void f();
    // ...
    };

    void g(X& x)
    {
    x.f(); // X::f還是Y::f還是錯誤?
    }

    這個問題能夠用幾種不同的方法解決。在標準化的時候,哪種方法最好還沒有定論。更多的細節,請參見《C++語言的設計和演變》。

    怎樣將一個整型值轉換為一個字符串?

    最簡單的方法是使用一個字符串流(stringstream):

    #include<iostream>
    #include<string>
    #include<sstream>
    using namespace std;

    string itos(int i) // 將int轉換成string
    {
    stringstream s;
    s << i;
    return s.str();
    }

    int main()
    {
    int i = 127;
    string ss = itos(i);
    const char* p = ss.c_str();

    cout << ss << " " << p << "\n";
    }

    自然地,這種技術能夠將任何使用<<輸出的類型轉換為字符串。對于字符串流的更多說明,參見《C++程序設計語言》21.5.3節。

    “int* p”正確還是“int *p”正確?

    二者都是正確的,因為二者在C和C++中都是有效的,而且意義完全一樣。就語言的定義與相關的編譯器來說,我們還可以說“int*p”或者“int * p”。

    在“int* p”和“int *p”之間的選擇與正確或錯誤無關,而只關乎風格與側重點。C側重表達式;對聲明往往比可能帶來的問題考慮得更多。另一方面,C++則非常重視類型。

    一個“典型的C程序員”寫成“int *p”,并且解釋說“*p表示一個什么樣的int”以強調語法,而且可能指出C(與C++)的語法來證明這種風格的正確性。是的,在語法上*被綁定到名字p上。

    一個“典型的C++程序員”寫成“int* p”,并且解釋說“p是一個指向int的指針類型”以強調類型。是的,p是一個指向int的指針類型。我明確地傾向于這種側重方向,而且認為對于學好更多的高級C++這是很重要的。

    嚴重的混亂(僅僅)發生在當人們試圖在一條聲明中聲明幾個指針的時候:

    int* p, p1; // 也許是錯的:p1不是一個int*

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>