在原始类型c ++中返回const或非const的区别是什么

时间:2013-10-25 07:49:53

标签: c++ return const

如果我在返回函数时添加const或忽略它,我试图理解有什么不同。让我通过一个例子来解释我的问题。

const int foo()
{
    return 3;
}

int main()
{
    int check;
    check=foo();
    cout<<"before:"<<check<<endl;
    check=1;
    cout<<"after:"<<check<<endl;
    return 0;   
}

到目前为止,我一直认为,因为我编写const foo()我无法更改检查变量,但是我编译它并且没有错误。

我想知道通过在我的foo()函数之前编写const来获得或放松的东西。

提前致谢

4 个答案:

答案 0 :(得分:2)

您没有更改变量。你正在改变它的副本。

check=foo();

foo返回的值指定给checkcheck不是const

答案 1 :(得分:2)

原始返回类型的const修饰符将被忽略。

另请参阅此问题:Should I return const objects?

答案 2 :(得分:0)

区别在于编译器警告:

warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
const int foo()
              ^

请参阅live demo

这种类型的东西被忽略了,所以没有效果。

答案 3 :(得分:0)

当您尝试返回参考时,它会有所不同。

例如:

int gGlobal;

const int & func()
{
    return gGlobal;
}

int main ()
{
     //Following statement will give error.
     func() = 3;
     return 0;
}