Могу ли я получить доступ к объекту в C ++, кроме использования выражения?

Согласно C ++ 03 3.10 / 1 каждое выражение является либо lvalue, либо rvalue. Когда я использую = чтобы присвоить новое значение переменной, имя переменной слева от присваивания является выражением lvalue. И похоже, что все, что я пытаюсь сделать с переменной, все равно будет использовать какое-то выражение.

Есть ли способ манипулировать переменной в C ++, кроме как с помощью выражения?

7

Решение

Единственный способ — через утверждение, но не через выражение, которое является частью такого утверждения. Примером будет определение, std::string x;, Это вызывает ctor по умолчанию на x, Но считается ли это манипуляцией для вас?

На самом деле не так много других утверждений. Операторы управления циклом не могут изменять сами объекты, кроме как через побочные эффекты выражений управления циклом. goto, break а также continue не могу сделать это вообще. throw это выражение и catch() ничего не могу изменить, так что пара тоже не имеет значения. Я не думаю, что есть какое-то другое выражение без выражения.

2

Другие решения

Вы можете установить значение переменной без использования выражения, но вы не можете выбрать, какое значение она получает. То, как я читаю приложение A к стандарту C ++ 11 (грамматика языка), декларация это не выражение. Если ты пишешь int a; в объеме функции, a будет назначено неопределенное значение. Если вы напишите это в области видимости файла, a будет присвоено значение 0. Но вы не можете присвоить ему значение или передать аргументы конструктора, потому что для этого требуется выражение.

2

Не уверен, что он отвечает на ваш вопрос строго, но вы можете косвенно манипулировать переменной. Например.:

int a;
int *pA = &a;
*pA = 5;

Здесь значение a изменяется, но без какого-либо выражения a, Выражение включает только pA,

Помимо этого, могут быть побочные эффекты от несвязанных операций, которые приводят к изменению переменной, преднамеренному или нет (например, повреждение памяти, которое непреднамеренно изменяет некоторую переменную).

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector