兩者是相同的。函數屬性可以放在函數的任何一邊。例如
pure Bar foo() {...}
和
Bar foo() pure {...}
是相同的。 pure
,nothrow
,const
等也是如此。這對於大多數屬性來說可能是很好的,但是當涉及const
,immutable
或inout
時,它會變得非常煩人,因爲它們都會影響返回類型。爲了使這些屬性影響返回類型,必須使用parens。例如
const(Bar) foo() {...}
返回const Bar
,而
Bar foo const {...}
和
const Bar foo() {...}
返回一個可變Bar
,但成員函數本身是const
。在大多數情況下,你想要的東西可能是要麼
Bar foo() {...}
或
const(Bar) foo() const {...}
,因爲它經常使具有const
成員函數迫使你返回const
(特別是如果你返回一個成員變量的情況下),但只要它與函數的作用一致,就可以在成員函數和它的返回類型之間使用const
的任意組合(例如,返回一個可變引用成員變量不起作用const
函數)。
現在我個人希望將const
放在左側是非法的,尤其是當所有功能屬性都可以放在函數的任何一邊的藉口不是真的(例如static
, public
, and private
don't seem to be able to go on the right-hand side),但不幸的是這就是目前的情況,我懷疑它會發生變化,因爲沒有人能說服沃爾特布萊特讓const
走在左邊是個壞主意。
然而,是通常被認爲是不好的做法const
,immutable
,或inout
在功能上的左側,除非他們使用括號,從而影響返回類型,正是因爲如果他們把在沒有parens的左邊,你必須立即質疑程序員是否意味着修改函數或返回類型。所以,讓它在左邊是非常沒有意義的(旁邊可能是泛型代碼,但它仍然不值得讓它恕我直言)。
[在D中爲[const和non-const結構提供@property]的可能重複(http://stackoverflow.com/questions/24160745/provide-property-for-const-and-non-const-structures-in -d) – burner