struct vs. class

David B. Held dheld at codelogicconsulting.com
Tue May 29 09:34:30 PDT 2007


Martin wrote:
> David B. Held Wrote:
> 
>> Martin wrote:
>>> Inspired by the recent discussion about iterator structs/classes I wanted
>>> to ask - what's the design rationale behind having both structs and classes?
>>> [...]
>> The most important difference is that structs have value semantics and 
>> classes have reference semantics.  There are very good reasons to have 
>> both, and unifying them would be as wrong as taking away pointers or 
>> taking away stack objects.
> 
> I totally agree that both are needed, but is it necessary to tie the
> difference to the difference between structs and classes? It would be
> nice if I could decide on the spot (i.e. when declaring a variable)
> in which way to use my type.

Unfortunately, you can't decide "on the spot" whether to use 
polymorphism or dynamic dispatch (nor can you make this choice on a 
per-instance basis in any other language I know of).  The best you can 
do is get reference semantics for your structs by using 'ref'.  But you 
will never get exact value semantics for classes because that could lead 
to slicing, which is why classes/structs in C++ are dangerous.  However, 
you can simulate polymorphic value types by creating invariant classes. 
  If you want to create both struct and class versions of your type and 
select them on a per-instance basis, you can create a template, but that 
doesn't make a whole lot of sense to me, so I'm not sure when or why you 
would do that.

Dave



More information about the Digitalmars-d mailing list