У меня есть прежде всего фон на C++. Я отслеживал ошибку в коде SystemVerilog, над которым я работаю, и был удивлен, обнаружив, что, по моему мнению, назначение копирования объектов было на самом деле ссылочным назначением. Этот упрощенный код показывает, что я имею в виду:Назначение SystemVerilog vs C++: ссылка или копия?
for (int i = 0; i < max_num; ++i)
{
var cls_obj obj1;
obj1 = obj_array[i];
some_function(obj1); // modifies the object passed in
// at this point BOTH obj1 and obj_array[i] are modified.
// some other code goes here
}
я ожидал только obj1
быть изменены. Это из-за ключевого слова var? Как именно копирование по сравнению с назначением ссылок работает в SystemVerilog? Мне сложно найти информацию из веб-поиска.
У вас есть доступ к LRM IEEE 1800-2009? Это очень ясно объясняется в главе 8.11. – dwikle
Эй, черви, я на самом деле. Я нашел его онлайн, но он стоит денег. Возможно, мне придется проверить со своими коллегами, чтобы узнать, есть ли у нас. Спасибо, что сообщили мне об этом. – Rich
FYI, версия LRM 2012 года теперь доступна онлайн для бесплатной загрузки здесь: http://standards.ieee.org/getieee/1800/download/1800-2012.pdf – dwikle