selectany

Specifici di Microsoft

Indica al compilatore che l'elemento dati globale dichiarato (variabile oggetto o) è un scelta-qualsiasi COMDAT (una funzione di package).

__declspec( selectany ) declarator

Note

In fase di collegamento, se le definizioni più di un COMDAT vengono visualizzati, le opzioni del linker e rifiuta il resto.Se l'opzione del linker /OPT: PER (Ottimizzazioni) è selezionato, quindi l'eliminazione COMDAT si verificherà per rimuovere tutti gli elementi di dati senza riferimenti nell'output del linker.

I costruttori e l'assegnazione alla funzione o i metodi statici globali nella dichiarazione non crea un riferimento e non impedisce /OPT: Eliminazione di PER.Gli effetti collaterali da tale codice non devono essere dipesi da quando nessun altro riferimento ai dati esiste.

Per gli oggetti in modo dinamico inizializzati e globali, selectany rimuove il codice di inizializzazione di un oggetto senza riferimenti, anche.

Un elemento di dati globale può in genere essere inizializzato solo una volta in un progetto DLL o EXE.selectany può essere utilizzato per inizializzare i dati globali definiti dalle intestazioni, quando la stessa intestazione visualizzato in più file di origine.selectany è disponibile sia nei compilatori in c e C++.

[!NOTA]

selectany può essere applicato solo all'inizializzazione effettiva degli elementi di dati globali che sono visibili esternamente.

Esempio

Questo codice consente di utilizzare selectany attributo:

//Correct - x1 is initialized and externally visible 
__declspec(selectany) int x1=1;

//Incorrect - const is by default static in C++, so 
//x2 is not visible externally (This is OK in C, since
//const is not by default static in C)
const __declspec(selectany) int x2 =2;

//Correct - x3 is extern const, so externally visible
extern const __declspec(selectany) int x3=3;

//Correct - x4 is extern const, so it is externally visible
extern const int x4;
const __declspec(selectany) int x4=4;

//Incorrect - __declspec(selectany) is applied to the uninitialized
//declaration of x5
extern __declspec(selectany) int x5;

// OK: dynamic initialization of global object
class X {
public:
X(int i){i++;};
int i;
};

__declspec(selectany) X x(1);

Questo codice consente di utilizzare selectany attributo per garantire riduzione di dati SIA quando viene inoltre utilizzato /OPT: ICF opzione del linker.Si noti che i dati siano contrassegnati con selectany e inserito in un oggetto const sezione (sola lettura).È necessario specificare in modo esplicito la sezione di sola lettura.

// selectany2.cpp
// in the following lines, const marks the variables as read only
__declspec(selectany) extern const int ix = 5;
__declspec(selectany) extern const int jx = 5;
int main() {
   int ij;
   ij = ix + jx;
}

Microsoft FINALE specifico

Vedere anche

Riferimenti

__declspec

Parole chiave C++