У меня есть этот код:Как найти функции C++, которые должны быть const?
#include <stdio.h>
class A
{
public:
int doit()
{
return 5;
}
int doit2() const
{
i++;
return i;
}
int i;
};
int main()
{
A a;
printf("%d\n", a.doit());
return 0;
}
Что компилируется с г ++ -Wall -Wpedantic main.cpp. Есть ли способ заставить g ++ сказать: «A :: doit() должен быть помечен как const»? g ++ 4.8 имеет -Wsuggest-attribute = const, но в этом случае он не работает. g ++ -Wall -Wpedantic -Wsuggest-attribute = const const_main.cpp -fipa-pure-const -O2 -Wextra по-прежнему чист.
Я согласен с тем, что const является конструктивным решением, но то, с чем я имею дело, является примером многих строк устаревшего кода, а для новых разработчиков, входящих в него, было бы полезно, если бы функции const были помечены как таковые. Я думаю, что компилятор знает достаточно, потому что, если я помечаю функцию как const, а затем модифицирую состояние, она выкинет ошибку. Я просто прошу об обратном, чтобы я мог прорваться и отметить функции const как const, и мне даже не нужно, чтобы он был совершенным и выяснял действительно сложные случаи, я бы согласился на простые случаи, поскольку у меня есть изложенных в приведенном выше коде.
Теперь я добавил неконстантную функцию doit2(), но заявил, что константа, а компилятор говорит:
const_main.cpp: In member function ‘int A::doit2() const’:
const_main.cpp:12:6: error: increment of member ‘A::i’ in read-only object
i++;
^
мне просто нужно противоположное тому, что (скажи мне, когда это может быть константной, но это ISN» t отмечен как таковой).
Найдено ответ здесь: Const correctness warnings c++
do 'A const a; a.doit(); ' –
@MattMcNabb Тогда должен быть предоставленный пользователем конструктор по умолчанию. – 0x499602D2
добавьте 'const' после метода и создайте экземпляр также с ключевым словом 'const', чтобы использовать метод, объявленный с помощью 'const'. – jondinham