Ale*_*lex 4 c++ pointers c++03
我一直在编写C++编程,我开始怀疑规则使用引用应尽可能应用于任何地方.
与这个相关的SO帖子不同,我对一种不同的东西感兴趣.
根据我的经验,参考/指针混合会混淆你的代码:
std::vector<Foo *> &x = get_from_somewhere(); // OK? reference as return value
some_func_pass_by_ref(x); // OK reference argument and reference variable
some_func_by_pointer(x[4]); // OK pointer arg, pointer value
some_func_pass_elem_by_ref(*x[5]); // BAD: pointer value, reference argument
some_func_that_requires_vec_ptr(&x); // BAD: reference value, pointer argument
Run Code Online (Sandbox Code Playgroud)
一种选择是,以取代&与* const像Foo &用Foo * const
void some_func_by_ref(const std::vector<Foo * const> * const); // BAD: verbose!
Run Code Online (Sandbox Code Playgroud)
这样至少走遍了.和我重写功能头走了,因为所有的参数将指针......在污染代码的价格const,而不是指针运算(主要是&和*).
我想知道在可能的规则下如何以及何时应用使用引用.
考虑:
提高可读性
*转换Foo*,Foo&反之亦然* const注意:我想要的一件事是每当我打算将元素放入STL容器时使用指针(参见boost :: ref)
我认为这不是C++ 03特有的东西,但如果它们可以被反向移植到C++ 03(即:NRVO而不是移动语义),那么C++ 11解决方案就可以了.
我什么时候应该在C++中使用引用?
当你需要处理像对象本身这样的变量时(大多数情况下你不明确需要指针而不想取得对象的所有权).
我想知道在可能的规则下如何以及何时应用使用引用.
尽可能,除非您需要:
Bjarne Stroustrup在他的书中指出他引入了对该语言的引用,因为需要在不制作对象副本的情况下调用运算符(这意味着"通过指针")并且他需要尊重类似于按值调用的语法(这意味着"不是通过指针")(因此参考文献诞生了).
简而言之,您应该尽可能少地使用指针:
const &std::shared_ptr,std::unique_ptr,your_raii_pointer_class_here不(生)的指针-.get()用于获取原始指针.我想到的一件事是每当我打算将元素放入STL容器时使用指针(或者我可以摆脱它吗?)
您可以使用Boost指针容器库.
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |