Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

W8026 Functions taking class-by-value argument

335
09 мая 2006 года
enola
379 / / 25.01.2005
Добрый вечер!
Компилятор варнинг выкидывает при компиляции класса, предполагаю ругается на класс AnsiString, т.к. на вторую строчку не ругается:
 
Код:
void SetTmp1(AnsiString data) {Tmp1 = data;}        
    void SetTmp2(int data) {Tmp2 = data;}

Что я делаю не так?
9.5K
09 мая 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by enola
Добрый вечер!
Компилятор варнинг выкидывает при компиляции класса, предполагаю ругается на класс AnsiString, т.к. на вторую строчку не ругается:
 
Код:
void SetTmp1(AnsiString data) {Tmp1 = data;}        
    void SetTmp2(int data) {Tmp2 = data;}

Что я делаю не так?



Судя по сообщению об ошибке, компилятору не нравится, что AnsiString передаётся по значению. Попробуй так:

 
Код:
void SetTmp1(const AnsiString &data) {Tmp1 = data;}        
    void SetTmp2(int data) {Tmp2 = data;}
585
10 мая 2006 года
honeybeer
297 / / 06.09.2004
Поясните плз что есть Tmp1, Tmp2?

2 damarus
Абсолютно законный код, передача по ссылке не обязательна.
335
10 мая 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by honeybeer
Поясните плз что есть Tmp1, Tmp2?


мда, забыл...
члены класса.

 
Код:
private:
        AnsiString Tmp1;
        Int Tmp2;
    public:
        void SetTmp1(AnsiString data) {Tmp1 = data;}        
        void SetTmp2(int data) {Tmp2 = data;}
585
10 мая 2006 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by enola
мда, забыл...
члены класса.
 
Код:
private:
        AnsiString Tmp1;
        Int Tmp2;
    public:
        void SetTmp1(AnsiString data) {Tmp1 = data;}        
        void SetTmp2(int data) {Tmp2 = data;}


Ну собственно говоря, в данном контексте Damarus совершенно прав. Лучше передавать константную ссылку. А варнинг - он на то и варнинг, что бы вы обратили внимание.

9.5K
10 мая 2006 года
Damarus
101 / / 08.04.2006
Дополню. Варнинг выдаётся именно потому, что класс передаётся по значению. Это конечно допустимо, но работает гораздо медленнее. Ведь необходимо создать локальный экземпляр класса и скопировать в него данные источника. Компилятор на это и обращает внимание.
335
10 мая 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by honeybeer
Ну собственно говоря, в данном контексте Damarus совершенно прав. Лучше передавать константную ссылку. А варнинг - он на то и варнинг, что бы вы обратили внимание.


варнинг это понятно, просто люблю когда проект без них компилится.
спасибо, теперь без них :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог