2014-12-24 36 views
11

Nie ma czegoś takiego, i to w najnowszym projekcie C++:Co to jest funkcja "zewnętrzna inline" i kiedy używać?

W § 7.1.2 .4:

Funkcja inline określa się w każdej jednostce tłumaczeniowej, w której to jest odr wykorzystane i ma dokładnie taką samą definicję w każdym przypadku (3.2). [Uwaga: Można wywołać wywołanie funkcji inline , zanim jej definicja pojawi się w jednostce tłumaczeniowej. - nota końcowa] Jeżeli definicja funkcji pojawia się w jednostce tłumaczeniowej przed pierwszą deklaracją jako inline, program jest źle sformułowany. Jeśli funkcja z zewnętrznym powiązaniem jest zadeklarowana w jednej jednostce tłumaczeniowej, to jest ona deklarowana inline we wszystkich jednostkach tłumaczeniowych, w których się pojawia; diagnostyka nie jest wymagana. Funkcja inline z zewnętrznym łącznikiem musi mieć ten sam adres we wszystkich jednostkach tłumaczeniowych. Statyczna lokalna zmienna w zewnętrznej funkcji inline zawsze odnosi się do tego samego obiektu . Typ zdefiniowany w treści zewnętrznej funkcji inline to taki sam typ w każdej jednostce tłumaczeniowej.

Niektóre informacje na temat tego, co to jest i kiedy należy z niego korzystać?

+0

Może podpowiedź dotycząca optymalizacji czasu łącza? – leppie

Odpowiedz

3

extern jest zbędny dla funkcji, więc nie ma sensu deklarować funkcji extern inline. Jeśli, na przykład, zadeklarowałeś funkcję o zasięgu globalnym, obowiązywałyby zasady z tej sekcji. Podobnie, jeśli zadeklarujesz klasę w zasięgu globalnym i zdefiniujesz funkcję składową w definicji klasy, jako taka funkcja będzie domyślnie niejawnieinline.

Pytanie, kiedy należy zadeklarować funkcję inline, to puszka z robakami, której nie mam zamiaru otworzyć tutaj. Zobacz: When should I write the keyword 'inline' for a function/method?

+0

'static' może być wart wspomnieć. – Yakk

Powiązane problemy