Есть ли эквивалент Python `pass` в С++ std11?
Я хочу утверждение, которое ничего не делает, но может использоваться в местах, требующих утверждения. Pass: http://docs.python.org/release/2.5.2/ref/pass.html
Изменение: Только что видел: Как выполнить неоперацию в C/C++?
#define pass (void)0
Решил мою проблему. Спасибо!
Ответы
Ответ 1
Точка с запятой или пустые скобки должны работать для вас
Например,
while some_condition(): # presumably one that eventually turns false
pass
Можно перевести на следующий С++
while (/* some condition */)
;
или
while (/* some condition */) {}
Возможно, для случая тройного оператора вы можете:
x > y ? do_something() : true;
Ответ 2
Нет. У вас нет pass
или эквивалентного ключевого слова. Но вы можете написать эквивалентный код без такого ключевого слова.
def f():
pass
становится
void f() {}
и
class C:
pass
становится
class C {};
В другом контексте может быть полезен другой синтаксис. Например,
class MyError(Exception):
pass
становится
class MyError : public std::exception
{
using std::exception::exception; //inherits constructor!
};
Как вы можете видеть, в этом контексте вы должны написать using
для наследования конструкторов из базового класса. В Python pass
делает аналогичную вещь, в аналогичном контексте.
Надеюсь, что это поможет.
Ответ 3
Как указано в комментариях, это не поддерживается, потому что это не имеет смысла. Условный оператор предназначен для оценки одного из двух операндов. Два. Не один.
Нельзя злоупотреблять оператором, чтобы выполнить какое-то условное действие только в одном из этих случаев. На самом деле, лучше, чтобы ни один из операндов не имел никаких побочных эффектов. Это не конструкция "сделать что-то", а построить "дать мне одну из двух вещей".
В этом отношении, если Python должен поддерживать то, что вы говорите, он поддерживает, тогда он будет разбит, где С++ - нет. Как бы то ни было, Python фактически не поддерживает его.
Напишите оператор if
, вместо этого:
if (x > y) {
do_something();
}
else {
/* Unimplemented at the moment */
}
Ответ 4
Я думаю, что в С++ пустая строка (;) будет эквивалентна "pass"
Ответ 5
Подход может быть:
Функции: сделать функцию "proto" возвращенной void и использовать ';' как некоторые предложили выше
Петли: конечно, перерыв
Что-нибудь еще: По моему опыту, я оставлю функцию или раздел кода закомментированным. Иногда я также добавлю небольшое сокращенное резюме для будущих целей редактирования.
То, как вы приближаетесь к этому, должно быть просто о том, что удобно. Просто делайте то, что вы хотите, что логически работает.
Ответ 6
Как @bboonn предлагает:
if (some_flag)
; // Do nothing
else if (some_other_flag)
do_something();