Снежная Королева wrote: ↑18 May 2017 06:50
Деваться некуда. Нужно было писать R код для диплома, и сами понимаете, R медленный. Все более менее серьёзное на С/С++ пишется. А потом втянулась и даже нравится. Реально в сто раз быстрее выполняется код.
И правильно. С/C++ простой язык если его использовать только для вычислительных чисел. Его легко понять не программисту, вам в самый раз.
Кстати, насчет инициилизации переменных. Тут есть еще такой момент: в С++ ведь есть классы. И с ними абсолютно теже самые проблемы, что и с переменными насчет инициидизации, только хуже. Например, если у вас есть класс ClassA и вы в своей функции написали
Первая строчка вы знаете почему плохая, там не написано n=0. Но вторая ничем по существу не отличается от первой - там создается объект instance_class который тоже нельзя использовать, потому что внутри этого объекта ничего путного не лежит. Там лежат начальные значения, определенные в конструкторе для этого объекта. И может получиться так, что вы "забудете" про это и передадите instance_class дальше в какую-то фунеции, которая начнем с нимм работать, как будто он живой обхект. Даже будет что-то счтаться, но только совсем не то, что вам нужно! Это таже самая проблема по-существу.
Тут есть выход - делать все по Сшному. Работать не с самими обхектами, а с их поинтерами. Это выглядит так:
Code: Select all
int n = 0;
ClassA * p_instance_class= NULL;
...
p_instance_class = new ClassA () ;
init (p_instance_class );
Получается такая вещь: вы вначале отводите пойнтер под будущий объект и заполняете его нулем. Если после этого вы в како-то момент передадите этот пойнтер дальще, внутрь другой функции, то где-то просто будет краш и вы это сразу увидите. А когда реально придет время, что вы готовы наполнить instance_class meaningful значениями, то вы делаете это как в последних двух строчках. В результате у вас нет ситуации, как в первом коде, когда обхектinstance_class вроде живой, но meaningless. Здесь он (вернее его пойнтер) будет не meaningless, а конкретный NULL, что и означает, что он не проициилизирован.