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

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

C++中避免使用類型轉(zhuǎn)換的原因是什么

這篇文章給大家介紹C++中避免使用類型轉(zhuǎn)換的原因是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、達(dá)坂城網(wǎng)絡(luò)推廣、小程序開發(fā)、達(dá)坂城網(wǎng)絡(luò)營銷、達(dá)坂城企業(yè)策劃、達(dá)坂城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供達(dá)坂城建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

Reason(原因)

Casts are a well-known source of errors. Make some optimizations unreliable.

類型轉(zhuǎn)換是眾所周知的錯(cuò)誤來源之一。讓某些優(yōu)化處理無法可靠進(jìn)行。

Example, bad(反面示例)

double d = 2;
auto p = (long*)&d;
auto q = (long long*)&d;
cout << d << ' ' << *p << ' ' << *q << '\n';

What would you think this fragment prints? The result is at best implementation defined. I got

你認(rèn)為這段代碼會(huì)輸出什么?最好的結(jié)果是依賴編譯器實(shí)現(xiàn)。我得到的是:

2 0 4611686018427387904

Adding

另外

*q = 666;
cout << d << ' ' << *p << ' ' << *q << '\n';

I got

我得到了

3.29048e-321 666 666

Surprised? I'm just glad I didn't crash the program.

神奇么?程序沒崩潰我已經(jīng)很高興了。

Note(注意)

Programmers who write casts typically assume that they know what they are doing, or that writing a cast makes the program "easier to read". In fact, they often disable the general rules for using values. Overload resolution and template instantiation usually pick the right function if there is a right function to pick. If there is not, maybe there ought to be, rather than applying a local fix (cast).

寫出類型轉(zhuǎn)換代碼的程序員通常以為知道自己在做什么,或者類型轉(zhuǎn)換可以讓代碼更容易理解。實(shí)際上,它們經(jīng)常忽視使用值的一般準(zhǔn)則。重載和模板例示通常可以選擇正確的函數(shù),只要這個(gè)函數(shù)存在。如果沒有,沒準(zhǔn)應(yīng)該準(zhǔn)備一個(gè),總會(huì)好過使用類型轉(zhuǎn)換解決問題。

Note(注意)

Casts are necessary in a systems programming language. For example, how else would we get the address of a device register into a pointer? However, casts are seriously overused as well as a major source of errors.

類型轉(zhuǎn)換在系統(tǒng)級(jí)編程中是必要的。例如,不然我們怎么獲得登錄到指針中的派生類類型的設(shè)備?然而,類型轉(zhuǎn)換已經(jīng)被嚴(yán)重地過度使用,從而變成了錯(cuò)誤的主要來源之一。

Note(注意)

If you feel the need for a lot of casts, there may be a fundamental design problem.

如果你覺得需要大量的類型轉(zhuǎn)換,可能是你的設(shè)計(jì)存在根本性問題。

Exception(例外)

Casting to (void) is the Standard-sanctioned way to turn off [[nodiscard]] warnings. If you are calling a function with a [[nodiscard]] return and you deliberately want to discard the result, first think hard about whether that is really a good idea (there is usually a good reason the author of the function or of the return type used [[nodiscard]] in the first place), but if you still think it's appropriate and your code reviewer agrees, write (void) to turn off the warning.

轉(zhuǎn)換成(void)是被廣泛認(rèn)可的關(guān)閉[[nodiscard]]警告的方法。如果你調(diào)用了一個(gè)帶有[[nodiscard]]返回值的函數(shù),而且你就是希望放棄處理該結(jié)果,首先考慮一下這是否是一個(gè)好主意(通常函數(shù)的作者或者當(dāng)初使用[[nodiscard]]返回值類型都有很好的理由),但如果考慮之后你還是覺得沒問題,而且你代碼的評(píng)審員這也同意的話,使用(void)關(guān)閉該警告。

譯者注:

[[nodiscard]]是C++17中引入的新特性,如果調(diào)用了返回值聲明為[[nodiscard]]的運(yùn)算而沒有處理返回值,C++17鼓勵(lì)編譯器發(fā)布警告。

Alternatives(其他選項(xiàng))

Casts are widely (mis) used. Modern C++ has rules and constructs that eliminate the need for casts in many contexts, such as

類型轉(zhuǎn)換被廣泛地使用?,F(xiàn)代C++包含很多場景下消除類型轉(zhuǎn)換的原則和構(gòu)造,例如

  • Use templates

  • 使用模板

  • Use std::variant

  • 使用std::variant

  • Rely on the well-defined, safe, implicit conversions between pointer types

  • 依靠指針類型之間經(jīng)過良好定義的,安全的,顯式類型轉(zhuǎn)換。

Enforcement(實(shí)施建議)
  • Force the elimination of C-style casts, except when casting a [[nodiscard]] function return value to void.

  • 強(qiáng)制消除C風(fēng)格類型轉(zhuǎn)換,除了將[[nodiscard]]函數(shù)返回值轉(zhuǎn)換為void之外。

  • Warn if there are many functional style casts (there is an obvious problem in quantifying 'many').

  • 如果存在很多功能性的類型轉(zhuǎn)換(修飾詞“很多”顯然有問題),發(fā)布警告。

  • The type profile bans reinterpret_cast.

  • 類型規(guī)則群組禁止使用reinterpret_cast。

  • Warn against identity casts between pointer types, where the source and target types are the same (#Pro-type-identitycast).

  • 如果目的類型和源類型相同,針對(duì)指針類型之間的身份轉(zhuǎn)換發(fā)布警告。

  • Warn if a pointer cast could be implicit.

  • 如果指針類型轉(zhuǎn)換可能會(huì)隱式發(fā)生,發(fā)布警告。

關(guān)于C++中避免使用類型轉(zhuǎn)換的原因是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前題目:C++中避免使用類型轉(zhuǎn)換的原因是什么
當(dāng)前鏈接:http://weahome.cn/article/iigegd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部