Pop*_*lin 2 c# c++ const-correctness
这个问题来自C#人问C++人.(我知道一点C,但只有一些C++的一般知识).
来到C#的C++开发人员说他们错过了const的正确性,这对我来说似乎很奇怪.在.Net中,为了禁止更改您需要创建不可变对象或具有只读属性/字段的对象,或者传递对象副本(默认情况下复制结构).
C++ const是否正确,是一种创建不可变/只读对象的机制,还是有更多呢?如果目的是创建不可变/只读对象,那么可以在像.Net这样的环境中完成同样的事情.
小智 7
C++中的const正确性只是一种确切地说出你的意思的方式:
void foo( const sometype & t ) {
...
}
Run Code Online (Sandbox Code Playgroud)
他说:"我不会改变t提到的对象,如果我试着,请Compiler先生警告我这件事".
它不是安全功能或(可靠地)创建只读对象的方式,因为使用C样式转换来破坏它是微不足道的.
我打赌这是心态问题.我正在和很长时间的C++人一起工作,并注意到他们似乎用C++思考(当然他们这样做了!).他们需要一段时间才能开始看到他们熟悉的答案的多个答案,以获得像'正确'这样的'股票'答案.给他们时间,并尝试轻轻地教育他们.
话虽如此,我确实喜欢C++'const'的保证方式.它主要是承诺接口的用户,对象,指针后面的数据或任何不会被搞乱的东西.我会将此视为const正确性的#1值.#2值是编译器在优化方面可以允许的.
当然,问题是如果整个sw堆栈还没有从头开始构建const.
我敢肯定C#有自己的一套范例来做同样的事情.这说明为什么"每年学习一门新的(计算或自然)语言"非常重要.只需锻炼一个人对其他方式的看法,就可以看到这个世界,并解决它的问题.
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |