91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中為什么不要進行不受限制的非成員函數調用

發布時間:2021-11-24 10:53:25 來源:億速云 閱讀:120 作者:iii 欄目:大數據

本篇內容介紹了“C++中為什么不要進行不受限制的非成員函數調用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

T.69:在模板內部,不要進行不受限制的非成員函數調用,除非你希望它成為一個定制點

Reason(原因)

  • Provide only intended flexibility.

    只按意圖提供彈性。

  • Avoid vulnerability to accidental environmental changes.

    避免偶然的環境變化時的脆弱性。


Example(示例)

There are three major ways to let calling code customize a template.

存在三種主要的方式讓調用代碼定制模板。

template<class T>
   // Call a member function
void test1(T t)
{
   t.f();    // require T to provide f()
}

template<class T>
void test2(T t)
   // Call a non-member function without qualification
{
   f(t);  // require f(/*T*/) be available in caller's scope or in T's namespace
}

template<class T>
void test3(T t)
   // Invoke a "trait"
{
   test_traits<T>::f(t); // require customizing test_traits<>
                         // to get non-default functions/types
}

A trait is usually a type alias to compute a type, a constexpr function to compute a value, or a traditional traits template to be specialized on the user's type.

特征通常是一種用于計算類型的類型別名,一種用于求值的常量表達式函數,或者用于針對某個用戶類型特化的傳統的特征模板。

Note(注意)

If you intend to call your own helper function helper(t) with a value t that depends on a template type parameter, put it in a ::detail namespace and qualify the call as detail::helper(t);. An unqualified call becomes a customization point where any function helper in the namespace of t's type can be invoked; this can cause problems like unintentionally invoking unconstrained function templates.

如果你想用依賴模板類型參數的值t調用你自己的幫助函數helper(t),將它放入::detail命名空間并用detail::helper(t)對調用進行限定;如果一個幫助函數處于t的類型可以被觸發的命名空間,不受限的調用會成為一個定制點;這會引起意外調用非約束函數模板等問題。

Enforcement(實施建議)

在模板同一個命名空間中,如果存在一個同名非成員函數,標記模板中針對傳遞受影響類型變量的非成員函數的不受限調

“C++中為什么不要進行不受限制的非成員函數調用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

商丘市| 嘉善县| 定安县| 吉安市| 仁化县| 孟津县| 嵩明县| 高雄市| 阳春市| 通山县| 康平县| 故城县| 兴义市| 扶余县| 巴青县| 铁岭市| 永顺县| 星座| 武宁县| 改则县| 平遥县| 永福县| 临潭县| 中宁县| 米泉市| 灵丘县| 富锦市| 文水县| 偏关县| 元氏县| 汉阴县| 白水县| 防城港市| 蕉岭县| 青冈县| 高邮市| 原平市| 天峨县| 灵寿县| 溆浦县| 达尔|