两者是相同的。函数属性可以放在函数的任何一边。例如
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