How can we use c++’s type system to prevent errors at compile time?
We pass big pieces of data by reference into helper functions by to avoid making copied of that data. If this function accidentally or sneakily changes that piece of data, it can lead to hard to find bugs! The soultion is marking those reference parameters const
to guarantee they won’t be changed in the function!
How does the compiler know when it’s safe to call member functions of const variables?
Const-interface: All member functions marked
const
in a class definition. Objects of type const className may only use the const-interface.
1 | template<class ValueType> class RealVector{ |
- Technically, adding a const-interface only limits what RealVector objects marked const can do.
- Using types to enforce assumptions we make about function calls help us prevent programmer errors!
Type safety: The extent to which a function signature guarantees the behavior of a function.
What’s std::optional<T>
? std::optional
is a template class which will either contain a value of type T or certain nothing(expressed as nullopt).
1 | void main(){ |
std::optional
interface
.value()
: returns the contained value or throwsbad_optional_access
error..value_or(valueType val)
: returns the contained value or default value, parameter val..has_value()
: returns true if contained value exists, false otherwise.
What if back()
returned an optional?
1 | std::optional<valueType> vector<valueType>::back(){ |
Why std::vector::back()
doesn’t return an optional(and probably never will)?? Let’s recall the design philosophy of C++
- Programmers should be free to choose their own style.
- All the programmer full control if they want it.
- Don’t sacrifice performance except as a last resort.
- Enforce safety at compile time whenever possible.
- 本文作者: 夏花
- 本文链接: http://xiahua19.github.io/2022/07/26/cs106l-13-std-optional-and-type-safety/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!