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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 130, средняя оценка - 4.73
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
#1

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

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

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

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

C++
1
int func(char *name)
Я плохо понимаю - что дает этот спецификатор const? Что может произойти если его не указать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 22:17     Работа с const
Посмотрите здесь:

Невозможно преобразовать параметр 1 из 'const char [3]' в 'const wchar_t * - Visual C++
void CprojectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: добавьте свой код обработчика сообщений или...

MessageBox - Cannot convert 'wchar_t const[45]' to 'const char *' - C++ Builder
Добро всем! :senor: MessageBox(NULL,(LPCWSTR)L"Данные не сохранены ! \nЗакрыть не сохранив ?", (LPCWSTR)L"Мое супер приложение", ...

Разница между объявлениями const Person p1 и Person const p1 - C++
Всем привет. Собственно весь вопрос уместился в заголовок: в чем разница между объявлениями const Person p1 и Person const p1, если...

Int* const или const int*? - C++
class A { public: A() : x(777) {} int* const GetX() { return &x; }

const - C++
объясните мне пожалуйста почему в конце объявления функций нужно писать const? точнее почему в данной ситуаций.. bool empty() const; ...

Const - C++ Builder
Начал изучать С++ токо кто знает в чём здесь проблема?? //---------------------------------------------------------------------------...

Const параметр - C++
зачем пишут class Sm{ public: Sm(const Sm&){}; // same with operator@ }; если ссылка и так константа. достаточно Sm&. или я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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
Еще ссылки по теме:

No init for const! - C++
Доброе утро, котаны!:) Вопрос - в джаве есть возможность сделать такую штуку final boolean someBool; someBool = true; То есть...

Нужен ли const? - C++
Объясните пожалуйста, для чего в перегрузке операции сравнения пишется const? Ведь если убрать, все равно будет работать bool operator...

const double * - C++
Доброго всем времени суток. Подскажите, в записи double my_func(const double *A); Константным будет указатель или массив?

const function - C++
Здравствуйте, совсем забыл не напомните, что меняется в функции в зависимости от расположения const: Например: const int const...

Const #define - C++
{ const int HOLFSDsize= 2;//#define HOLFSDsize 2 // m-угольник void HOLFSD() { int i, n, l; // объявляем...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,652
Записей в блоге: 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
Ответ Создать тему
Опции темы

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