передача структуры непосредственно в функцию - PullRequest
1 голос
/ 08 апреля 2010

У меня есть структура, которую я инициализирую так:

typedef struct
{
 word w;
 long v;
}
MyStruct;


MyStruct sx = {0,0};
Update(sx);

Теперь, кажется, что это пустая трата - сначала объявить это, а затем передать. Я знаю, что в C # есть способ сделать все в одной строке. Есть ли возможность передать его более умным (читай: чище) способом в мою функцию обновления?

Ответы [ 2 ]

6 голосов
/ 08 апреля 2010

В C ++ структуры такие же, как классы, за исключением структур, по умолчанию все общедоступно. Таким образом, вы можете дать struct конструктор, например,

struct MyStruct
{
 word w;
 long v;

 MyStruct(word w, long v) : w(w), v(v) {}
};


Update(MyStruct(0,0));

Кроме того, структура typedef'ing в стиле C не нужна и не рекомендуется в C ++.

5 голосов
/ 08 апреля 2010

Зависит от того, как объявлен ваш Update. Если он ожидает значение типа MyStruct или ссылку типа const MyStruct&, вы можете просто сделать

Update(MyStruct());

Это возможно, потому что вы хотели инициализировать ваш объект нулями (что в этом случае будет делать инициализатор ()). Если вам нужны другие (ненулевые) значения инициализатора, вы должны либо предоставить конструктор для MyStruct, либо сделать так, как вы это делаете в своем вопросе (по крайней мере, в текущей версии языка C ++).

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