Значение семантических трюков в C ++ - PullRequest
2 голосов
/ 15 октября 2011

Помимо C ++ (поскольку он перегружен оператором), знаете ли вы другой язык ООП, который может (или эмулировать в худшем случае) "семантику значений"?

Ответы [ 2 ]

4 голосов
/ 15 октября 2011

В C #, если вы определяете свой «объект» как struct, он имеет значение семантическое.Если вы определите его как class, он имеет ссылочную семантику (если вы не сделаете его неизменным, как string, тогда его семантика будет больше похожа на значение 1).

Я добавлю, что это довольнолегко сломать эту «неявную» семантику.

struct MyStruct
{
    public StringBuilder SB;
}

MyStruct a = new MyStruct();
a.SB = new StringBuilder();

MyStruct b = a;

теперь вы нарушили семантику, потому что и a, и b «указывают» на одну и ту же ссылку.

0 голосов
/ 15 октября 2011

структуры в D также имеют семантику значений.

...