Подтвердить что ты не робот

Есть ли эквивалент Python `pass` в С++ std11?

Я хочу утверждение, которое ничего не делает, но может использоваться в местах, требующих утверждения. Pass: http://docs.python.org/release/2.5.2/ref/pass.html

Изменение: Только что видел: Как выполнить неоперацию в C/C++?

#define pass (void)0

Решил мою проблему. Спасибо!

4b9b3361

Ответ 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();