真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中為什么不要進(jìn)行不受限制的非成員函數(shù)調(diào)用

本篇內(nèi)容介紹了“C++中為什么不要進(jìn)行不受限制的非成員函數(shù)調(diào)用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

曲江網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),曲江網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為曲江上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的曲江做網(wǎng)站的公司定做!

T.69:在模板內(nèi)部,不要進(jìn)行不受限制的非成員函數(shù)調(diào)用,除非你希望它成為一個(gè)定制點(diǎn)

Reason(原因)

  • Provide only intended flexibility.

    只按意圖提供彈性。

  • Avoid vulnerability to accidental environmental changes.

    避免偶然的環(huán)境變化時(shí)的脆弱性。

Example(示例)

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

存在三種主要的方式讓調(diào)用代碼定制模板。

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

template
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
void test3(T t)
   // Invoke a "trait"
{
   test_traits::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.

特征通常是一種用于計(jì)算類(lèi)型的類(lèi)型別名,一種用于求值的常量表達(dá)式函數(shù),或者用于針對(duì)某個(gè)用戶類(lèi)型特化的傳統(tǒng)的特征模板。

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.

如果你想用依賴模板類(lèi)型參數(shù)的值t調(diào)用你自己的幫助函數(shù)helper(t),將它放入::detail命名空間并用detail::helper(t)對(duì)調(diào)用進(jìn)行限定;如果一個(gè)幫助函數(shù)處于t的類(lèi)型可以被觸發(fā)的命名空間,不受限的調(diào)用會(huì)成為一個(gè)定制點(diǎn);這會(huì)引起意外調(diào)用非約束函數(shù)模板等問(wèn)題。

Enforcement(實(shí)施建議)

在模板同一個(gè)命名空間中,如果存在一個(gè)同名非成員函數(shù),標(biāo)記模板中針對(duì)傳遞受影響類(lèi)型變量的非成員函數(shù)的不受限調(diào)

“C++中為什么不要進(jìn)行不受限制的非成員函數(shù)調(diào)用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


文章標(biāo)題:C++中為什么不要進(jìn)行不受限制的非成員函數(shù)調(diào)用
新聞來(lái)源:http://weahome.cn/article/pcsios.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部