2015-02-23 2 views
2

Быстрый вопрос о прохождении ВАРА по ссылке: Что еще наши правила:C++ Передать по ссылке один массив элементов - это факт?

1) Использование классического указателей синтаксиса:

void change(int *a) { a = 0; } 
... 
int number = 1; 
change(&number); 

2) Или делает его один массив элементов и передавая его по ссылке по умолчанию:

void change(int a[]) { a[0] = 0; } 
... 
int number[1] = {1}; 
change(number); 

Что-то я думал. Хотелось узнать, как разница в использовании ресурсов при использовании массива одного элемента вместо простой переменной.

+2

Как насчет 'void change (int & a) {a = 0;} int number = 1; изменить (номер); '? –

+0

Как 'int number = 1;' один элемент массива? (хорошо технически любая переменная может рассматриваться как 1-элементный массив, но я не думаю, что это то, что вы имели в виду) –

+0

Руководство по стилю Google C++ предпочитает классическое: void change (int * a) {* a = 0; }. В основном он рекомендует всем неконстантным входам использовать указатель, а все константные входы - константные ссылки. – user3528438

ответ

4

Нет смысла создавать массив из одного элемента. Просто передайте его в качестве ссылки, используя оператор &. Создав массив из одного элемента, вы делаете свой код более сложным, запутывая реальную цель переменной и делая жизнь следующего разработчика более раздражающей.

Что касается проблем с использованием ресурсов, то нет никакого другого ресурса. Под капотом оба они в основном просто указатель.

8

Первый не изменит значение a очков, он просто делает копию из a пункт NULL, а затем сразу же отбрасывает его.

Если вы хотите передать по ссылке, просто пройти по ссылке:

void change(int& a) { a = 0; } 

//... 
int a; 
change(a); 
+0

В общем, указатели более явные, чем ссылки на изменяемые аргументы. Многие руководства по стилям препятствуют неконстантным ссылкам (например, http://google-styleguide.googlecode.com/svn/trunk/cppguide.html) – grep

+2

@grep, возможно, для C-программистов. Что еще вы использовали бы для неконсолидной ссылки? И, пожалуйста, не принимайте руководство по стилю Google, если вы не работаете в Google. «Многие руководства по стилю препятствуют несвязанным ссылкам» - я смею показать мне еще 2, кроме Google. –

+2

@grep Руководства Google - это шутка. Следуйте, если вы не знаете C++ и не хотите учиться. – juanchopanza