T *&返回类型到底是什么

时间:2018-09-07 01:28:26

标签: c++

我一直在研究矢量实现,偶然发现了一条使我作为天真的C ++学习者感到困惑的行。

  1. 什么是require 'devise' class ApplicationController < ActionController::Base include Devise::Controllers::Helpers before_action :configure_permitted_parameters, if: :devise_controller? 返回类型?
  2. 这仅仅是对指针的引用吗?
  3. 那为什么这会有用?

链接到代码:https://github.com/questor/eastl/blob/56beffd7184d4d1b3deb6929f1a1cdbb4fd794fd/vector.h#L146

T*&

3 个答案:

答案 0 :(得分:3)

  1. 它是指向T类型的值的指针引用,该值作为模板参数传递,或更确切地说:
    1. 存在一个VectorBase<T>实例,其中该程序指定了TT可以是intstring或其他任何东西。
    2. T值作为矢量中的一项存在。
    3. 可以创建指向该项目的指针:T* pointer = &this->itemValues[123]
    4. 然后您可以创建对此指针的引用:https://msdn.microsoft.com/en-us/library/1sf8shae.aspx?f=255&MSPPError=-2147217396
  2. 正确
  3. 如果您需要“间接”使用值,则指向引用的指针要比指向指针的指针便宜,因为编译器/ CPU无需执行双向重定向。

答案 1 :(得分:0)

http://c-faq.com/decl/spiral.anderson.html

这将是对类型T的指针的引用。对指针的引用可能有点棘手,但是在使用引用时,智能指针经常使用它,从而将增量保存到了引用计数器中。

答案 2 :(得分:0)

C ++中的类型应从右到左读取。之后,它变为:引用T的指针。因此您的假设是正确的。

对指针的引用非常有用,通常用作输出参数或输入输出参数。让我们考虑一下std :: swap

的特定情况
    fake_num[np.isnan(fake_num.iloc[:,0])].iloc[:,0]=lr.predict(np.array(fake_num[np.isnan(fake_num.iloc[:,0])].iloc[:,1]).reshape(-1, 1))
fake_num
D:\Users\shan xu\Anaconda3\lib\site-packages\pandas\core\indexing.py:630: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self.obj[item_labels[indexer[info_axis]]] = value
Out[12]: 
     0    1
0  1.0  1.1
1  2.0  1.2
2  3.0  1.3
3  4.0  1.4
4  NaN  1.6
5  NaN  1.8

与每种类型一样,它可用作返回值。在状态库中,您可以找到template <typename T> void swap(T*& lhs, T*& rhs) { T *tmp = rhs; rhs = lhs; lhs = tmp; } 的返回类型,允许使用std::vector<int *>::operator[]

在我从事过的项目中,我还没有看到这种可以改变内部结构的吸气剂的用法。但是,它确实允许您编写一种用于读取和写入成员值的方法。

在我看来,我将其称为代码气味,因为它使您难以理解哪些调用者进行了实际修改。 当将const引用返回给成员时,故事当然会有所不同,因为这可能会阻止复制。尽管阻止指针的复制不会增加价值。