Должен ли я привести CString, переданный в Format / printf (и varargs в целом)? - PullRequest
1 голос
/ 28 мая 2009

Я недавно взял небольшое приложение MCF C ++, которое, очевидно, находится в рабочем состоянии. Для начала я запускаю PC-Lint поверх кода, а lint жалуется, что CStringT передаются в Format. Мнение в интернете кажется раздельным. Некоторые говорят, что CSting предназначен для обработки этого варианта использования без ошибок, но другие (и статья MSDN) говорят, что он всегда должен быть приведен при передаче в функцию переменного аргумента. Может ли Stackoverflow прийти к какому-либо консенсусу по этому вопросу?

1 Ответ

3 голосов
/ 29 мая 2009

CString была тщательно разработана для передачи в виде списка переменных аргументов, поэтому использовать его таким образом безопасно. И вы можете быть совершенно уверены, что Microsoft позаботится о том, чтобы не нарушить это конкретное поведение. Поэтому я бы сказал, что вы можете продолжать использовать его таким образом, если хотите.

Тем не менее, лично я бы предпочел актерский состав. Строковые классы не так часто ведут себя (например, std :: string так), и для ментальной согласованности может быть лучше просто сделать это «безопасным» способом.

P.S .: См. thread для подробностей реализации и дальнейших примечаний о том, как разыгрывать.

...