Hum*_*ger 24 c++ const vector const-correctness
在接口中定义函数时:
virtual void ModifyPreComputedCoeffs ( std::vector < IndexCoeffPair_t > & model_ ) = 0;
Run Code Online (Sandbox Code Playgroud)
我们想要指定不应该在push_back等意义上改变向量model_操作不应该对向量进行操作,但是可以更改model_中的IndexCoeffPair_t结构对象.我们该如何指定?
virtual void ModifyPreComputedCoeffs ( const std::vector < IndexCoeffPair_t > & model_ ) = 0;
Run Code Online (Sandbox Code Playgroud)
我觉得不行.
Mar*_*som 17
不是将向量传递给函数,而是执行标准库所做的事情,而是传递一对迭代器.
virtual void ModifyPreComputedCoeffs ( std::vector < IndexCoeffPair_t >::iterator & model_begin, std::vector < IndexCoeffPair_t >::iterator & model_end )
Run Code Online (Sandbox Code Playgroud)
C++ const-correctness概念被IMO高估了.你刚才发现的是它有一个很大的局限性:它不能按构图进行扩展.为了能够创建非const对象的const向量,您需要实现自己的向量类型.请注意,例如,即使标准库也必须为const_iterators引入新类型.
我的建议是在你被迫的地方使用const-correctness,而不是在任何地方你都可以.理论上,const正确性应该有助于程序员,但由于语法的原因而且成本非常高而且非常原始(只有一点,不能按组合扩展,甚至需要代码重复).
同样根据我的经验,这个所谓的大帮助并不是那么大......它捕获的大多数错误都与const-correctness机器本身有关,而与程序逻辑无关.
有没有想过为什么大多数语言(包括在C++之后设计的语言)没有实现这个想法?
| 归档时间: |
|
| 查看次数: |
11607 次 |
| 最近记录: |