在私有類型上使用 '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中文網其他相關文章!