C++: считается ли объект, на который указывает «указатель на const», неизменным или просто неизменяемым?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++: считается ли объект, на который указывает «указатель на const», неизменным или просто неизменяемым?

Сообщение Anonymous »

В следующей ситуации параметр «указатель на const bool» pbAbort имеет смысл, поскольку рабочая функция не изменяет объект bool. Однако я беспокоюсь, что компилятор может оптимизировать многочисленные проверки значения bool, если я не использую обычный «указатель на bool». Логическое значение — это флаг, который может быть установлен потоком менеджера.

Код: Выделить всё

void runWorkManager(DataSet& data)
{
bool bAbort = false;
callWorkerFuncFromNewThread(data, &bAbort);
while(!(data.isWorkCompleted || data.isWorkAborted))
{
updateGuiWithProgress(data.progress);
if(userWantsToAbort())
bAbort = true;
}
}
void workerFunc(DataSet& data, bool const *const pbAbort)
{
data.doPreWork();
if(*pbAbort) //Check #1
{
data.isWorkAborted = true;
return;
}

for(int i = 0; i < 100; ++i)
{
data.doWorkN(i);
if(*pbAbort) //Check #2
{
data.isWorkAborted = true;
return;
}
}
data.isWorkCompleted = true;
}
Если предполагается, что *pbAbort никогда не изменится, компилятор может удалить блок проверки №2.

Стандарт C++ 11 версии 7.1.6.1.3 гласит:


Указатель или ссылка на тип с указанием cv не требуется на самом деле укажите или обратитесь к квалифицированному резюме объект, но он рассматривается так, как будто это так; путь доступа с указанием const не может использоваться для изменения объекта, даже если указанный объект не является константным и может быть изменен с помощью другого пути доступа.


К сожалению, это утверждение не совсем отвечает на мой вопрос.

Подробнее здесь: https://stackoverflow.com/questions/271 ... ng-or-just
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»