程式語言中型別前置和型別後置的優缺點各是什麼?

時間 2021-05-11 13:13:12

1樓:冒泡

如果你只是使用,自己學清楚就行,好壞也就是看你自己主觀上爽不爽了

不過如果從語言設計來說,前置型別我個人認為有倆問題,都是在函式方面,乙個是需要引入void這種關鍵字,整體風格有點突兀,當然你把void作為乙個型別來看待好像問題也不大(C++的做法,而且還能用void型別的特殊性搞一些技巧),但還是不如後置自然(沒有返回值我就不寫);另乙個是如果支援多值返回,由於返回型別可能比較冗長,更進一步像go有返回引數命名,寫到後面可能可讀性更好一些,先突出函式名和輸入引數,當然你也可以改用C#的out、ref這種風格了

2樓:F001

看到很多人說前置和後置都一樣的,我想反駁一下。至少在C++裡面,後置明顯比前置要合理。

首先想到的乙個例子就是涉及模板的複雜型別。如果型別那麼容易parse出來,為什麼C++還要 typename 這個關鍵字?比如說,下面這個典型例子:

template

T>void

foo(

constT&

t)編譯器不知道 T::bar 是值還是型別,所以它會假設這個 bar 是乙個值。只有我們寫 typename T::

bar * p; 它才知道這是乙個型別,這句話是宣告了乙個指標。後置型別從來沒有這種問題。

第二,後置函式返回型別也比前置要好。甚至有人專門寫了篇文章 https://

arne-mertz.de/2016/11/t

railing-return-types-everywhere/

。這個也有典型例子:

// 這是最合適的寫法,C++14以後還可以省略 -> 後面的型別

template

auto add(lhsT& lhs, rhsT& rhs) -> decltype(lhs + rhs)

// 這樣是編譯不過的,因為編譯器很難提前知道 lhs 和 rhs 是後面宣告的引數

template

decltype(lhs + rhs) add(lhsT& lhs, rhsT& rhs)

另外,對於 lambda,返回型別必須後置。

第三,很多語言中都有匿名型別,比如C++裡面的lambda,想用乙個變數儲存這個物件的話,沒法在原始碼中把它的型別名寫出來。所以對很多語言來說,型別前置語法是不夠用的,提供一種可選型別的變數宣告語法是必須的特性。

// 用 std::function 型別來儲存 lambda 是有額外效能開銷的。auto是最合適的。

auto lambda = [&]()

統一後置語法百利而無一害,為什麼要搞不一致呢。

3樓:avoidant

型別前置後置沒有差別。(型別放在變數前還是變數後無差別)

有差別的是:在對型別到底是什麼進行語法分析時,是往右多看一點就多得到一點資訊,還是往右看了半天都搞球不清寫的到底是啥(腦子裡用來匹配括號的棧都快爆了),然後看到最後才恍然大悟。。

c語言非要在宣告中模擬使用時的語法,把語法分析給搞難做了。其實編譯器無所謂,問題人肉眼語法分析的時候受不了。

就型別本身來說,「把大的方面放前面,把小的方面放後邊」比反過來,有優勢。

比如這樣乙個型別:

array of 5 pointer to array of 8 int

從左到右越看越懂。這相當於後置。

可你要從右往左面,是不是半天搞不懂說啥。這就是前置。

從這個就能看中文位址「中國陝西西安」比英文位址「York USA」有優勢。中文就是由大到小的後置。

4樓:snowwaft

我想,這個應該和編譯器相關吧。

有些編譯器從左往右讀,有些相反。

編譯器讀到乙個文字塊,會放到棧裡面,一行讀完再出棧。由於棧是先進後出的,所以對於從右往左讀的編譯器,型別放在引數左邊,會先出來。

反過來也是類似的,對於從左往右讀的編譯器,型別在引數右邊。

至於編譯器為什麼要設計成從左往右還是從右往左,估計和大括號應不應該換行一樣,屬於無解的問題。

弱型別 強型別 動態型別 靜態型別語言的區別是什麼?

卞舒言 Scheme has latent as opposed to manifest types.Types are associated with values also called objects rather than with variables.Some authors refer ...

如何理解程式語言的型別安全性?

BigLuo Swift is atype safelanguage,which means the language helps you to be clear about the types of values your code can work with.簡單說就是,輸入和輸出的內容型別絕對...

從語言型別學看,其他語言中有沒有類似漢語逆序詞的現象,(合適 適合 離別 別離)

泠顏 我沒做過型別學,但是我看了一下其他答主給的材料感覺跟題中兩例差別有點大。合適 是形容詞性的,一般用作定語和謂語,作謂語且單說時需要 很 太 一般描述某事物的正確性或正當性。適合 是動詞性的,一般用作謂語,當然在定語位置的情況也和常見,不過應該是省略賓語的動詞短語。一般描述某事物對某人物的匹配情...