2016-06-01 3 views
0

Мне было интересно, является ли #define nd '\n' приемлемой альтернативой старым старым '\n'?#define <anyName> ' n' вместо ' n'

#include <iostream> 
#define nd '\n' 
int main(){ 
    std::cout << "Hello World !" << nd ; 
} 

Я чувствую, что это пригодится при печати переменных или итераторов, что бы сэкономить несколько нажатий клавиш.

+3

Допустимо для чего? Для обфускации? Если вы хотите новую строку, напечатайте новую строку. Если вы хотите сбросить буфер после новой строки, используйте 'std :: endl' –

+3

' std: endl' не просто '\ n' – P0W

+0

@tas для более простого использования« \ n », да std :: endl может использоваться если это необходимо. – harb7nger

ответ

1

Существует, я полагаю, некоторые используют для манипулятора, что делает «написать новую строку без флеша», чтобы не сохранять нажатия клавиш, а потому, что наивная версия (os << '\n' или os << "\n") может привести к нежелательным отступы, если os.width() больше чем 1, и писать os.put('\n') раздражает.

Итак:

template<class charT, class traits> 
std::basic_ostream<charT, traits>& newl(std::basic_ostream<charT, traits>& os) { 
    return os.put(os.widen('\n')); 
} 

Как макрос, это просто бессмысленно запутывания.

1

мне было интересно, если #define nd '\n' является приемлемой альтернативой старой доброй std::endl?

Не совсем. std::endl делает две вещи:

  1. печати новой строки
  2. Flush поток

В то время как ваше решение делает только первый, так что это не равнозначны.

С другой стороны, по сравнению с буквальным '\ n' этот макрос сохраняет так мало нажатий клавиш, увеличивая путаницу, что я считаю, что это приносит больше вреда, чем пользы.

+0

Да, это правда, я должен был перефразировать мой вопрос в качестве замены << "\ n"; – harb7nger

1

Nope. Недопустимо. Если вы хотите новую строку, просто введите '\n', и если вы хотите также сбросить буфер, используйте std::endl. Никто, кто читает ваш код, не узнает, что означает ваш макрос, и никакие значительные усилия не будут сохранены в вашей собственной части.

+0

Да, согласился, мне было любопытно узнать, насколько полезен этот подход. – harb7nger

Смежные вопросы