Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.66/89: Рейтинг темы: голосов - 89, средняя оценка - 4.66
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
1

Работа с const

09.09.2011, 22:17. Просмотров 16474. Ответов 21
Метки нет (Все метки)

Объясните пожалуйста разницу между вызовами двух функций:

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

C++
1
int func(char *name)
Я плохо понимаю - что дает этот спецификатор const? Что может произойти если его не указать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2011, 22:17
Ответы с готовыми решениями:

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

Работа с ключевым словом const
Всем мира! Снова приходится обращаться к вам, дорогие форумчане за разъяснением вот какой штуки....

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&) const; ...

21
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10837 / 6647 / 1614
Регистрация: 25.07.2009
Сообщений: 12,428
11.09.2011, 12:18 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
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
11.09.2011, 18:37 22
Цитата Сообщение от easybudda Посмотреть сообщение
Ну я и не говорил, что модификатор const - панацея от всех несчастий
Я и не говорил, что ты говорил, просто уточнил

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

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

C
1
2
3
const char *p1;
char *p2;
p2 = p1;
т.е. в методах с признаком const этот квалификатор распространяется на неявный указатель this
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2011, 18:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Отрисовка линий движения материальной точки при u_1=const и u_2=const
Добрый день. У меня не получается построить графики движения материальной точки для u_1=const и...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} ...

Ошибка E2034: Cannot convert 'char const[8]' to 'const wchar_t *'
Прошу прощения за свой вопрос, но я никак не пойму где ошибка? использую c++ builder 10 (если это...

Ошибка: E2034 Cannot convert 'char const[51]' to 'const wchar_t *
Пытаюсь добавить в memo1 название файлов располагающихся в каталоге, в Console Application все...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.