首頁 >後端開發 >C++ >`auto` 可以推導出 C 中的私有類型嗎?

`auto` 可以推導出 C 中的私有類型嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-19 20:51:12115瀏覽

Can `auto` Deduce Private Types in C  ?

在私有類型上使用 'auto'

在 C 中,在私有類型中使用 'auto'似乎是違反直覺的,因為在以下程式碼中演示:

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

通常,預計嘗試直接訪問私有類型“Bar”(例如,Foo::Bar b = f.Baz();)將導致錯誤。然而,使用 'auto' 時並非如此:

int main() {
    Foo f;
    auto b = f.Baz();         // ok
    std::cout << b.i;
}

這種行為是由於 'auto' 規則和模板類型推導之間的相似性而出現的。類似於如何將私有類型傳遞給模板函數:

template <typename T>
void fun(T t) {}

int main() {
    Foo f;
    fun(f.Baz());         // ok
}

這種能力源於這樣一個事實:雖然私有類型的名稱可能無法訪問,但類型本身仍然可用。因此,“auto”能夠正確推導類型並將其分配給“b”變量,儘管它是私有類型。

以上是`auto` 可以推導出 C 中的私有類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn