2012-05-05 44 views
3

轉換爲size_t(0)是否使用0在下面的代碼?C++風格和0到size_t(0)

const string foo = "testing"; 
    const size_t pos = foo.find("i"); 
    string name = foo.substr(size_t(0), pos); 

也就是說,當我把唯一的0被它轉化爲size_t(0)?如果是這樣,一種形式是否優先於其他形式?我的猜測是,t(0)是最好的使用,因爲它使轉換顯式。另一方面,也許一些程序員認爲size_t(0)冗長?我在實踐中猜測,沒有人關心任何一種方式。

+0

我只能說C++支持類型轉換的許多不同語法,'type(arg)'在適合性,可讀性,明確性等方面並不是最好的? –

+0

爲什麼不呢?也許是因爲'type'可以作爲函數調用讀取? – scottkosty

+0

是的,並且作爲一個類的實例化等等。編寫'(type)arg'好得多,因爲它只意味着一件事 - 類型轉換。那麼這個隨便的讀者就不用猜測了。在專業化方面''static_cast (arg)'更好。 –

回答

4

也就是說,當我只放0時,它會轉換爲size_t(0)?

轉換是隱含的,因爲substr是:

basic_string substr(size_type pos = 0, 
        size_type count = npos); 

因此,你投是多餘的。

+0

這不是原因。隱含的原因不能是使用默認參數聲明成員函數。 – dalle

+1

@dalle:這不是默認的渲染多餘的值 - 這是事實,參數是size_t,所以'0'會自動轉換爲size_t。 –

+0

@JerryCoffin:是的,原因是0將自動轉換爲size_t,但它與函數的聲明無關。 – dalle

1

你是類型鑄造0到相同的參數類型,它是一個很好的做法,但不是必要的,因爲這將被隱式轉換。

string substr (size_t pos = 0, size_t n = npos) const; 

結帳this

+2

國際海事組織這是相當不好的做法 - 你通常應該避免多餘的演員。 –

+0

不,它不是,但不是首選。 –