在DI中可以指定const函数,就像在c ++中一样:
struct Person {
string name;
// these two are the same?
const string getConstName() { return name; }
string getConstName2() const { return name; }
}
Run Code Online (Sandbox Code Playgroud)
看来上面两个是相同的含义.这是真的吗?
如果是这样,我怎么能返回一个const字符串而不是定义一个const函数?
两者是相同的.函数属性可以位于函数的任一侧.例如
pure Bar foo() {...}
Run Code Online (Sandbox Code Playgroud)
和
Bar foo() pure {...}
Run Code Online (Sandbox Code Playgroud)
是相同的.这同样适用于pure,nothrow,const,等,这可能是大多数属性很好,但它变得很烦人的时候const,immutable或者inout是参与的,因为它们都可以影响到返回类型.为了使这些属性影响返回类型,必须使用parens.例如
const(Bar) foo() {...}
Run Code Online (Sandbox Code Playgroud)
返回a const Bar,而
Bar foo const {...}
Run Code Online (Sandbox Code Playgroud)
和
const Bar foo() {...}
Run Code Online (Sandbox Code Playgroud)
返回一个mutable Bar,但成员函数本身就是const.在大多数情况下,你想要的也许是
Bar foo() {...}
Run Code Online (Sandbox Code Playgroud)
要么
const(Bar) foo() const {...}
Run Code Online (Sandbox Code Playgroud)
因为经常出现这样的情况:使用const成员函数会强制你返回const(特别是如果你要返回一个成员变量),但是你可以const在成员函数和它的返回类型之间有任何组合,只要它与函数正在做(例如,返回对成员变量的可变引用不能从const函数中起作用).
现在就个人而言,我希望把const在左边是非法的,特别是当所有的功能属性可以去功能两侧的借口是不是真的反正(例如static,public和private似乎不能够走在右边),但不幸的是,这就是现在的样子,我怀疑它会发生变化,因为没有人能够说服Walter Bright放弃const继续下去是一个坏主意左边.
然而,通常认为放置,或在功能的左侧除非他们使用parens因此影响返回类型是不好的做法,正是因为如果他们在左边没有parens,你立即有质疑执行它的程序员是否意味着修改函数或返回类型.所以,允许它在左边是没有意义的(除了通用代码,但它仍然不值得允许它恕我直言).constimmutableinout
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |