2012-03-16 23 views
6

Quando si utilizza la classe di memoria in in D, i dati non sono modificabili per la propria funzione. Anche questo passa i dati per riferimento e non per valore? Ho notato che in ref non è valido.Classe di memorizzazione "in" D

Se in non passa i dati per riferimento, esiste un modo per ottenere i dati per riferimento ma una garanzia per il chiamante che i dati non verranno modificati?

risposta

7

in parametri sono not passed by reference.

Per quanto ne so da the documentation, in è solo una scorciatoia per const scope. Non vedo alcun modo per emulare i parametri ref in, poiché ref scope è illegale. Come ha detto BCS, puoi utilizzare ref const se non ti interessa la classe di archiviazione scope.

+0

A proposito: quanto è meglio passare un oggetto di classe "enorme" per funzionare? in C++ vengono usati i riferimenti const - quindi, 'ref const BaseClass obj' è completamente simile a' const BaseClass & obj' in C++? – Raxillan

+0

@Raxillan Sì, sono equivalenti. Vale anche la pena notare che 'ref' è necessario solo per le enormi strutture, poiché le classi vengono sempre passate per riferimento. – Maxpm

+1

Grazie! Tuttavia, è strano per me quali strutture e classi siano entità differenti in D - in C++ 'struct' è solo una classe con la protezione' pubblica' di default per tutti i membri. Interessante. – Raxillan

2

Non ho controllato ma credo che ref const dovrebbe funzionare.

+0

Che compila, ma se 'in' non passa per riferimento (vero?) Allora qual è il punto di haivng' in'? –

+0

@BobD, non sono sicuro di cosa succederà con 'in', ma il suo inizio è stato quello di consentire al compilatore di ottimizzare il suo aspetto. Ciò significava che poteva passare per riferimento se lo si desiderava. Non penso che lo faccia mai e non conosco i piani per questo. –