为什么通用引用不能保持其论点的一致性?

时间:2019-02-01 13:10:48

标签: c++ c++11 templates type-deduction forwarding-reference

public boolean isOnline() {
    ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

    if(netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()){
        Toast.makeText(context, "No Internet connection!", Toast.LENGTH_LONG).show();
        // Your code to show dialog..
        return false;
    }
   return true; 
}

如上面的代码所示。我的问题是:

为什么通用引用不保持其参数的一致性?

1 个答案:

答案 0 :(得分:6)

是的。在您的示例中,您尝试将const应用于引用类型本身,而不是int。如果在类型之后写const,则可以看到它更干净。

const T& == T const& == int& const&.

由于const在应用于引用类型时不会改变任何内容,因此将其忽略。

实际上,如果您写的int& const没有模板,则会出现编译错误。但是,在模板中是允许的,因为在某些情况下很难避免此类类型。

查看此问题的另一种方法是用指针替换引用。如果这样做,将得到以下类型:

const T* = T const* = int* const*

此类型是指向不可变(常量)的指针,该指针指向可变(非常量)int的指针。