2013-10-25 46 views
0

我试着理解什么不同,如果我添加const或在返回函数时忽略它。让我通过一个例子来解释我的问题。返回const或non-const在主要类型中有什么区别C++

const int foo() 
{ 
    return 3; 
} 

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

到现在为止,我一直认为,因为我写的常量富()我不能够改变的检查varaible,但是我编译它,并没有错误。

我想知道我通过在我的foo()函数之前编写const获得或放宽了什么。

在此先感谢

+0

它曾经被建议这样做,以避免意外地分配给返回临时:'FOO()= 10; //无法编译。现在建议不要这样做,因为它禁止移动语义(即它意味着你必须将整个返回的临时文件复制到某个局部变量中,而不是窃取它。不是说它在原始情况下有所不同,但作为一般规则这很好)。在你的情况下,'check'是非''constst',并且被赋予与'foo'返回的'const'临时相同的*值*。 – BoBTFish

+0

可能duplicate的http://stackoverflow.com/questions/10177904/what-this-const-before-method-name-mean – Saqlain

+0

对于“可能”的相当严格的定义 - 这是一个确切的愚蠢。 –

回答

0

的差异以下编译器警告:

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

live demo

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

+0

区别在于警告....非常不好的描述。你应该说为什么警告被抛出...... – dhein

+0

@Zaibis如果你真的读了警告,它会告诉你为什么。 – rubenvb

+0

所以无论如何你应该提到它发生这种情况的原因是什么。 – dhein

2

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

check=foo(); 

分配由foo返回到check值。 check不是const

0

它会让差异时,你会尝试返回引用。

例如:

int gGlobal; 

const int & func() 
{ 
    return gGlobal; 
} 

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

这是完全不同的事情。 – jrok

+0

@jrok:当然不是,他是对的。 –

+0

@DídacPérez他是对的,但它与OP问题无关。 – jrok

相关问题