Declaring functions - cppreference.com
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
<metanoindex/>
Una dichiarazione di funzione introduce il nome della funzione e il suo tipo. Essa può apparire in qualsiasi ambito, ed è comunemente messo in file di intestazione.
Original:
A function declaration introduces the function name and its type. It may appear in any scope, and is commonly placed in header files.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
ret name ( params ) ;
|
(1) | ||||||||
ret name ( params ) cv ref except attr ;
|
(2) | ||||||||
auto name ( params ) cv ref except attr -> ret ;
|
(3) | (dal C++11) | |||||||
Una definizione di funzione fornisce il corpo di una funzione. Può apparire solo nel namespace o classe.
Original:
A function definition provides the body of a function. It may only appear in namespace or class scope.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
decl name ( params ) { body }
|
(4) | ||||||||
attr decl name ( params ) cv ref except attr virt try init-list { body } catch
|
(5) | ||||||||
attr decl name ( params ) cv ref except attr -> ret virt try init-list { body } catch
|
(6) | (dal C++11) | |||||||
attr decl name ( params ) cv ref except attr virt = 0 ;
|
(7) | ||||||||
attr decl name ( params ) cv ref except attr virt = default ;
|
(8) | (dal C++11) | |||||||
attr decl name ( params ) cv ref except attr virt = delete ;
|
(9) | (dal C++11) | |||||||
Spiegazione
1)
Dichiarazione di funzione tipica
Original:
Typical function declaration
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
Dichiarazione di funzione completa
Original:
Comprehensive function declaration
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
Dichiarazione di funzione completa con tipo di ritorno finale
Original:
Comprehensive function declaration with trailing return type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
Tipico non membro funzione definizione
Original:
Typical non-member function definition
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
5)
Definizione di funzione completa
Original:
Comprehensive function definition
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
6)
Definizione di funzione completa con tipo di ritorno finale
Original:
Comprehensive function definition with trailing return type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
7)
Pure funzione membro virtuale
Original:
Pure virtual member function
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
8)
Funzione membro inadempiente
Original:
Defaulted member function
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
9)
Soppresso funzione membro
Original:
Deleted member function
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
| attr(C++11) | - | Sequenza opzionale di qualsiasi numero di funzione di attributi, come Original: Optional sequence of any number of funzione di attributi, such as The text has been machine-translated via Google Translate. |
| ret | - | il tipo restituito dalla funzione, può essere Original: the type returned by the function, may be The text has been machine-translated via Google Translate. |
| decl | - | dichiarazione di successione specificatore, che consiste di nessuno o alcune delle seguenti parole chiave: statica, extern, inline, Original: declaration specifier sequence, which consists of none or some of the following keywords: statica, extern, inline, The text has been machine-translated via Google Translate. {{par | cv |{{tr| Opzionale |
| ref(C++11) | - | Opzionale Original: Optional The text has been machine-translated via Google Translate. |
| except | - | sia dinamico-specifica eccezioni o noexcept-specifica Original: The text has been machine-translated via Google Translate. |
| virt(C++11) | - | Opzionale Original: Optional The text has been machine-translated via Google Translate. |
->ret(C++11)
|
- | Trailing tipo di ritorno, applicabile solo se è ret Original: Trailing return type, only applicable if ret is The text has been machine-translated via Google Translate. |
| init-list | - | Costruttore inizializzatore lista, utilizzato solo nei costruttori Original: The text has been machine-translated via Google Translate. |
try
|
- | Funzione opzionale blocco try. Se presente, catch deve essere fornito Original: Optional function try block. If present, catch must be provided The text has been machine-translated via Google Translate. |
| catch | - | Sequenza opzionale di catch-blocchi, applicabile solo su Original: Optional sequence of catch-blocchi, only applicable of The text has been machine-translated via Google Translate. |
| body | - | Il corpo della funzione, una (eventualmente vuoto) un'istruzione composta Original: The body of the function, a (possibly empty) compound statement The text has been machine-translated via Google Translate. |
| params | - | La lista dei parametri Original: The text has been machine-translated via Google Translate. |
Esempio 1: non membri funzioni
#include <iostream> #include <string> // declaration in namespace(file) scope // (the definition is provided later) int f1(); // simple function with a default argument, returning nothing void f0(const std::string& arg = "world") { std::cout << "Hello, " << arg << '\n'; } // function returning a pointer to f0 auto fp11() -> void(*)(const std::string&) { return f0; } // function returning a pointer to f0, pre-C++11 style void (*fp03())(const std::string&) { return f0; } int main() { f0(); fp11()("test"); fp03()("again"); int f2(std::string); // declaration in function scope std::cout << f2("bad12") << '\n'; } // simple non-member function returning int int f1() { return 42; } // function with an exception specification and a function try block int f2(std::string str) noexcept try { return std::stoi(str); } catch(const std::exception& e) { std::cerr << "stoi() failed!\n"; return 0; }
Output:
Hello, world Hello, test Hello, again stoi() failed! 0
Esempio 2: funzioni membro
#include <iostream> #include <string> #include <utility> #include <exception> struct S { int data; // simple converting constructor (declaration) S(int val); // simple explicit constructor (declaration) explicit S(std::string str); // const member function (definition) virtual int getData() const { return data; } }; // definition of the constructor S::S(int val) : data(val) { std::cout << "ctor1 called, data = " << data << '\n'; } // this constructor has a catch clause S::S(std::string str) try : data(std::stoi(str)) { std::cout << "ctor2 called, data = " << data << '\n'; } catch(const std::exception&) { std::cout << "ctor2 failed, string was '" << str << "'\n"; throw; // ctor's catch clause should always rethrow } struct D : S { int data2; // constructor with a default argument D(int v1, int v2 = 11) : S(v1), data2(v2) {} // virtual member function int getData() const override { return data*data2; } // lvalue-only assignment operator D& operator=(D other) & { std::swap(other.data, data); std::swap(other.data2, data2); return *this; } }; int main() { D d1 = 1; S s2("2"); try { S s3("not a number"); } catch(const std::exception&) {} std::cout << s2.getData() << '\n'; D d2(3, 4); d2 = d1; // OK: assignment to lvalue // D(5) = d1; // ERROR: no suitable overload of operator= }
Output:
ctor1 called, data = 1 ctor2 called, data = 2 ctor2 failed, string was 'not a number' 2 ctor1 called, data = 3