簡體   English   中英

用於包裝數組的類的轉換與下標運算符重載

[英]Conversion vs subscript operator overload for class wrapping an array

我有一個包裝數組的類,並希望為其用戶提供典型的下標訪問。

...
class C;
C c;
auto x = c[0];
...

我可能都提供轉換

class C
{
    int i[10];
public:
    operator int*() { return i; }
};

並提供下標運算符重載

class C
{
    int i[10];
public:    
    int& operator[](unsigned idx) {
        // eventual out-of-bounds check
        return i[idx]; 
    }
};

除了OOB檢查,應該首選哪個?

如果您只想在類C上調用operator[] ,那么只需重載operator[] 如無必要,不允許隱式轉換。 如果你提供operator int* ,一些無意義和危險的東西也會被允許。 例如

C c;
if (c) ...;
delete c;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM