Будут ли спецификаторы доступа оставаться неизменными при преобразовании кода с языка высокого уровня на язык низкого уровня? - PullRequest
0 голосов
/ 09 мая 2018

Похоже ли, что все закрытые защищенные члены данных, присутствующие на языках высокого уровня, будут по-прежнему такими же, или они все будут открытыми при переходе на сборку с языка более высокого уровня?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Да и нет. В основном нет.

Частные и защищенные члены - это действительно время компиляции. Он помогает компилятору не допускать глупых ошибок в коде. И компилятор делает это, отказываясь создавать ассемблерный код, который нарушает ограничения.

Таким образом, в полученном исполняемом файле нет кода, который нарушал бы правила, потому что такой код никогда не был бы успешно скомпилирован. В этом смысле ограничения все еще существуют.

Но на уровне сборки или аппаратного обеспечения нет ничего подобного частному или защищенному. Это просто байты. Если бы вы писали код непосредственно в ассемблере, вы могли бы прочитать все закрытые переменные C ++, и ничто не остановило бы вас.

0 голосов
/ 09 мая 2018

Спецификаторы доступа C ++ - это ограничения на то, как вы называете вещи на языке C ++. Они не влияют на поведение во время выполнения абстрактной машины, C ++ определяется в терминах (кроме, скажем, разрешения странных расположений памяти). Реализации низкого уровня, в свою очередь, в основном эмулируют указанную абстрактную машину.

Так нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...