最好用代码解释:
static Unit& None() { static Unit none(....); return none;}
有什么区别?
static const Unit& None() { static Unit none(....); return none;}
最好用代码解释:
static Unit& None() { static Unit none(....); return none;}
有什么区别?
static const Unit& None() { static Unit none(....); return none;}
前面static
的函数有一个完全不同于static
里面的函数1。特别是,它与返回类型完全无关。这些函数的返回类型与此处相同:
Unit& None() { static Unit none(....); return none;}
const Unit& None() { static Unit none(....); return none;}
即没有static
限定符。
因此,区别仅在Unit&
和之间Unit const&
:第一个允许修改返回值,第二个不允许。
1)对于类成员,static
表示函数不能访问类的实例变量和实例函数;在命名空间范围函数上,static
意味着函数符号不是从编译单元中导出的。
您正在返回对静态对象/变量的引用。因此可以为函数分配一个值,然后更改该对象/变量的值。
第二个拒绝改变 的值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
}