Jon*_*Mee 12 c++ const qualifiers
我知道这个函数很简单,它将被内联:
int foo(int a, int b){
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是,编译器无法自动检测到这与以下内容相同:
int foo(const int a, const int b){
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
既然可以检测到这一点,为什么我需要在const
任何地方输入?我知道inline
由于编译器的进步,关键字已经过时了.是不是该const
做同样的时间?
ten*_*our 19
您不会const
因不修改变量而放置.您const
用来强制您不要修改它.如果没有const
,您可以修改该值.有了const
,编译器会抱怨.
这是一个语义问题.如果该值不应该是可变的,那么使用const
,编译器将强制执行该意图.
Pet*_*ica 13
是的,编译器可以在您的示例中证明constness.
不,这没用:-).
更新: Herb Sutter专注于他的一个问题(http://www.gotw.ca/gotw/081.htm).摘要:
当然,这篇文章值得一读.
关于整个程序优化/翻译,这通常是利用constness cf所必需的.以下评论来自amdn和Angew.
不能编译器只是自动检测这是否与...相同
如果你的意思是编译器是否可以检测到在第二种情况下没有修改变量,很可能是肯定的.编译器可能会为两个代码示例生成相同的输出.但是,const
在更复杂的情况下可能有助于编译器.但最重要的一点是它可以防止你无意中修改其中一个变量.
编译器将始终知道您做了什么,并将从中推断内部常量以优化代码.
编译器永远不知道的是你想要做什么.
如果您希望变量保持不变但稍后在代码中意外更改,则编译器只能告诉编译器您想要的内容时才会捕获此错误.
这就是const
关键字的用途.
归档时间: |
|
查看次数: |
1107 次 |
最近记录: |