Форум программистов, компьютерный форум CyberForum.ru

Работа с const - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 130, средняя оценка - 4.73
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
09.09.2011, 22:17     Работа с const #1
Объясните пожалуйста разницу между вызовами двух функций:

C++
1
int func(const char *name)
и

C++
1
int func(char *name)
Я плохо понимаю - что дает этот спецификатор const? Что может произойти если его не указать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
11.09.2011, 12:18     Работа с const #21
Цитата Сообщение от Evg Посмотреть сообщение
Следующие два кода без проблем пройдут компиляцию.
Ну я и не говорил, что модификатор const - панацея от всех несчастий. Вот такой код не будет компилироваться
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main (void)
{
  const char str[] = "abcde";
  *str = 'A';
  printf("%s\n", str);
  return 0;
}

adamo86, если попытаться скомпилировать вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
class Name{
    std::string _name;
public:
    Name(const std::string & name) : _name(name) {}
    std::string get() { return _name; }
};
 
void func(const Name & n){
    std::cout << n.get() << std::endl;
}
 
int main(){
    std::vector<Name> vec;
    vec.push_back(Name("Vasya"));
    vec.push_back(Name("Kolya"));
    vec.push_back(Name("Petya"));
    
    for_each(vec.begin(), vec.end(), func);
    
    return 0;
}
получите
Код
$ g++ -o for_each for_each.cpp 
for_each.cpp: In function ‘void func(const Name&)’:
for_each.cpp:14: error: passing ‘const Name’ as ‘this’ argument of ‘std::string Name::get()’ discards qualifiers
ну или вроде того. Объявите метод get() константным
C++
1
std::string get() const { return _name; }
и всё получится.
Код
$ ./for_each 
Vasya
Kolya
Petya
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 18:37     Работа с const
Еще ссылки по теме:

C++ error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+'
C++ Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
C++ Чем отличаются выражения (const int[]){value} от (const int[]){100}
C++ Модификатор const для параметра функции не const?
C++ Builder Ошибка E2034: Cannot convert 'char const[8]' to 'const wchar_t *'

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
11.09.2011, 18:37     Работа с const #22
Цитата Сообщение от easybudda Посмотреть сообщение
Ну я и не говорил, что модификатор const - панацея от всех несчастий
Я и не говорил, что ты говорил, просто уточнил

Цитата Сообщение от easybudda Посмотреть сообщение
Вот такой код не будет компилироваться
Тут делается явная запись по указателю, объявленному как const

Цитата Сообщение от easybudda Посмотреть сообщение
adamo86, если попытаться скомпилировать вот это
Примерно то же самое, что и

C
1
2
3
const char *p1;
char *p2;
p2 = p1;
т.е. в методах с признаком const этот квалификатор распространяется на неявный указатель this
Yandex
Объявления
11.09.2011, 18:37     Работа с const
Ответ Создать тему
Опции темы

Текущее время: 02:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru