最好在代码中解释:
static Unit& None() { static Unit none(....); return none;}
有什么不同?
static const Unit& None() { static Unit none(....); return none;}
答案 0 :(得分:4)
函数前面的static
与函数 1 中的static
完全不同。特别是,与返回类型完全无关。这些函数的返回类型与此处相同:
Unit& None() { static Unit none(....); return none;}
const Unit& None() { static Unit none(....); return none;}
即。没有static
限定符。
因此差异仅在Unit&
和Unit const&
之间:第一个允许修改返回值,第二个不允许。
1)对于类成员,static
表示该函数不能访问该类的实例变量和实例函数;在命名空间范围函数上,static
表示不从编译单元导出函数符号。
答案 1 :(得分:2)
您正在返回对静态对象/变量的引用。因此可以为函数赋值,然后更改该对象/变量的值。
第二个人拒绝改变none
的价值:
static int& func1()
{
static int a = 1; return a;
}
static const int& func2()
{
static int a = 1; return a;
}
int main()
{
func1() = 10; // OK
func2() = 10; // error: assignment of read-only location
}