為什麼libstdc 的allocator要實現兩個operator

時間 2021-05-31 04:44:23

1樓:d41d8c

33807 - Incorrect ambiguous overload

TL;DR: 不是優化。如果不寫,在某種情況下會編譯出錯。

在foo所在的namespace存在

template bool operator==(const T&, const T&);

這樣「過於寬容」的operator==的時候,由於ADL,allocator 之間的相等比較會找到這個operator==,而這個operator==與標準庫提供的版本(也就是問題中給出的第乙個過載)具有相同的優先順序(根據 [temp.func.order] 和 [temp.

deduct.partial] 無法判定哪個模板 is more specialized than

另乙個),所以會產生歧義。而問題中給出的第二個過載比前兩個版本都要優先(more specialized),所以用它可以消除歧義。

libstdc++的testsuite裡面有完整的例子:

參見 http://

wg21.link/lwg2472

2樓:法蘭克斯雪諾

我理解是不是前者是用於不同類別的==,後者用於同一種類別的==比如前者在傳參int和bool比較時呼叫,後者在int和int比較時呼叫

你可以打個trace試試看是不是這樣呼叫的ps:這確實不是偏特化。。。

能否把高版本的libstdc 靜態連線到乙個只暴露純C介面的動態庫中,給低版本c 程式呼叫?

楊二寶 你用4.8剛好是C 11的核心特性完全支援的版本,其實GCC對11規範的標準庫的完全支援我記得好像是5.0版本吧 你這個方法是可以的,我這樣處理過,有個事情你最好處理下,就是完全不給對方暴露你在自己庫裡面分配的記憶體,有什麼需要new的讓對方傳入他已經分配好的指標進來你操作都好,他自己釋放資...

為什麼要早睡,為什麼要戒菸,為什麼要對自己的行為進行約束?

不知 因為等你做到了這些,你才會發現這些才是真正的快樂!放縱自己的慾望帶來的快樂是虛假的快樂,就像抽菸,抽菸真的快樂嗎?我看未必,抽菸之所以讓你覺得快樂,是因為它暫時緩解了你的痛苦,只是暫時緩解,你抽的越多,你的菸癮就越大,沒煙抽的時候就越痛苦,玩手機也一樣,不玩就痛苦,玩了就停不下來,擼管也是一樣...

為什麼別人的東西總是好的,為什麼別人的形象往往和神一樣?

舊顏 打個比方,假如你是完美主義者,你就會覺得別人的東西都是好的,然後自己就會有很多缺點不足什麼的,同理,你也會覺得別人的東西好 兔子 可能是因為,一方面,我們的文化裡講究家醜不外揚,大家對外都只講光照的一面。另一方面,我們的文化裡講究不要亂評判別人,傳播的也都是別人好的一面。最後結果就是,看起來別...