Насколько важно, что вы знаете стандарт C ++?


11

Я попытался выполнить поиск, но я не увидел аналогичного вопроса (либо этот, либо моя поисковая терминология была неверной - если так, не стесняйтесь закрыть).

Я заядлый пользователь SO, и я заметил, что в обсуждениях и ответах есть много ссылок на стандарт C ++ - и я должен признать, что я никогда не читал этот конкретный документ, язык заставляет мои глаза болеть ... Так что , вопрос в том, может ли разработчик C ++ действительно писать код для жизни, даже не прочитав этот документ? Действительно ли это важно для нас, простых смертных, которые не занимаются написанием компиляторов?


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

Ответы:


16

Нет - вы можете прекрасно обойтись без него

Однако у вас будет гораздо более глубокое понимание, если вы потратите время на его изучение. Возможно, следуйте рекомендациям из тех вопросов, которые вас беспокоят, и выучите небольшой кусок за раз.


8

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

Стандарт может дать достойную ссылку на стандартную библиотеку (не столько для самого языка), как только вы освоитесь с ней, но я не решаюсь рекомендовать использовать ее таким образом. Большинство людей, кажется, лучше справляются с другими материалами. Тем не менее, я чаще обращаюсь к стандарту, когда мне нужно что-то узнать о stdlib.

Тем не менее, чтение проектов и документов комитета - это один из способов быть в курсе C ++ 0x - на самом деле, в настоящее время это один из немногих способов.

Что касается SO и других форумов, я стесняюсь цитировать стандарт, за исключением случаев, когда кажется, что постер явно и определенно выиграет - возможно, они просили об этом или я думаю, что они неявно ожидают этого. В большинстве случаев, особенно с программистами, плохо знакомыми с C ++, цитирование обычно не очень помогает.


Если кто-то хочет знать, что должен делать язык, Стандарт неоценим. Если они хотят знать, почему компилятор что-то делает, это часто очень полезно. По другим вопросам не так уж и много.
Дэвид Торнли

1
@DavidThornley: Трудно судить о том, как долго я привык читать стандарт, но определенно кажется, что большинство людей находят такие тексты, как TC ++ PL, более доступными, даже чтобы понять, что должен делать язык.
Фред Нурк

1
@ Фред Нурк: Почти все более доступно, чем Стандарт. Я имел в виду отвечать на вопросы о SO и тому подобное, и не было ясно об этом. Это добавляет немного авторитета, когда люди цитируют cplusplus.com и другие источники.
Дэвид Торнли

@DavidThornley: я очень редко цитирую подобные сайты (в частности, у cplusplus.com слишком много проблем на мой вкус), но для большинства постеров на SO они также кажутся более полезными, даже с ошибками, чем стандартные - и легко к сожалению, доступная онлайн - большая часть этого.
Фред Нурк

@Fred, это интересно знать, я всегда думал, что cplusplus - хорошая ссылка (недостатком является их источник рекламы - что крайне неуместно!), Теперь я должен помнить, что нужно ссылаться на ссылку sgi.
Ним

6

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

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


3
В большинстве ситуаций вам это не нужно. То, что вам нужно, описано в других книгах. Только когда вы добираетесь до тех угловых случаев или никогда не используете углы языка, вам нужно проверить определение в стандарте (и обычно есть альтернатива использованию угловых случаев в языке). Оставьте стандарт разработчикам компилятора, а общий разработчик может ужиться с другими неформальными текстами.
Мартин Йорк,

2

Вероятно, более важно, чтобы вы знали, где находится стандарт, и знали, когда искать вещи.

Если ничего другого, вы должны периодически проверять, чтобы убедиться, что вы придерживаетесь последней версии и не допустили смещения кода.


2

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

Реально, однако, эти ответы должны быть смягчены суждением и опытом. (Текущий) стандарт говорит, exportчто это ключевое слово и говорит, что он делает. В действительности это просто не работает таким образом с большинством компиляторов. Точно так же, во многих случаях, если у вас есть три человека, не согласных с каким-то конкретным кодом и тем, что стандарт может сказать об этом, это может быть признаком того, что код может нуждаться в переписывании, чтобы быть более простым.

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


«Не больше», вероятно, важно - если только вы не хотите, чтобы эксперты
говорили

2

Я зарабатывал на хлеб в качестве разработчика на C ++ в общей сложности около 4 лет, не читая стандарт. Фактически, в течение первых двух лет я даже не читал ничего, кроме C ++ Primer от Стэна Липпмана и статей MSDN. Так что это возможно - на самом деле я боюсь, что большинство людей, создающих код на C ++, даже не читали таких фундаментальных работ, как Effective C ++ et al. который я сам обнаружил только позже.

ИМХО, чтобы быть хорошим разработчиком C ++, нужно понимать внутреннюю логику языка (языков) (как отмечает Скотт Мейерс, C ++ - это около 4 разных языков) и общие идиомы и подводные камни, и быть готовым всегда учиться чему-то большему. Чтение веток на SO может многому научить насчет угловых случаев, когда, в свою очередь, стоит прочитать соответствующие части стандарта, если кто-то действительно хочет копать глубже. Но чтение всего этого, вероятно, редко требуется большинству из нас.


Хорошо, что есть важные книги, которые намного важнее (для большинства программистов, которые не пишут компиляторы), чем стандартные. +1 - но есть немало «необходимых» книг.
Steve314

@ Steve314, действительно - если начать перечислять их, это не поможет ответить на этот конкретный вопрос. Но я добавил ссылку на соответствующую ветку на SO сейчас.
Петер Тёрёк

@ Петер - приятное прикосновение, но моя неустановленная точка зрения заключалась в том, что ни одна из «важных» книг не является действительно необходимой. Большинство программистов на C ++ должны были прочитать несколько названий из этого списка, но все ли они? Вряд ли. Даже если бы ты это сделал, я сомневаюсь, что ты действительно сможешь сохранить все эти знания. «Эффективный C ++» находится в моем списке еще не прочитанных, поэтому я, очевидно, считаю его менее важной книгой.
Steve314

@ Steve314, я не имел в виду, что нужно читать все из них - я тоже не читал, и некоторые из них я читал, но не был впечатлен :-) Между некоторыми из них есть некоторые совпадения, так что это вопрос личного вкуса и шанса, с которым разработчик встречается первым и / или который (и) он / она называет «существенным». Я считаю, что важно то, что есть некоторые общие идиомы, которым следует следовать, и общие ловушки, которых следует избегать, и о большинстве из них следует знать, и наименее болезненный способ узнать их - из (некоторых) этих книг ,
Петер Тёрёк

Конечно, я не буду знать, насколько это важно, пока не прочитаю.
Steve314

1

«Знание стандарта» - это вопрос степени, и он не обязательно означает запоминание оригинального документа.

Документ по стандартам разработан, чтобы быть авторитетным - не обязательно доступным. Есть много удаленных источников, которые намного более доступны. Правда, в этом есть немного китайского шепота, но это редко является большой проблемой - конечно, на уровне одного шага.

Полное раскрытие - я должен сказать это - я никогда не читал стандарт. Хотя я, вероятно, приложу все усилия, чтобы получить полный документ C ++ 0x, когда он будет завершен.

РЕДАКТИРОВАТЬ, конечно, если Страуструп выпустит новую версию "языка программирования C ++", я могу согласиться на это снова.


1

Когда я программировал на C ++, я часто обращался к стандарту языка за информацией о стандартных функциях библиотеки. Стандартная библиотека C ++ довольно большая, и я считаю, что языковой стандарт является наиболее удобным источником.


1
Вау, действительно? Я всегда нахожу онлайн-ресурсы, такие как cplusplus, незаменимыми в этом смысле ...
Nim

1

Я мог бы поклясться, что уже отвечал на этот вопрос, но не могу его найти. В принципе, C ++ в отличии от Java в том , что он предназначенный , чтобы иметь отверстие в спецификации других спецификациях платформы может заполнить (например , POSIX или спецификации ABI вашей архитектуры, или компилятора). Таким образом, отвечая на вопросы на сайтах, таких как StackOverflow, часто приводят спецификации, указывающие, что только то, что что-то работает на одном компиляторе, не означает, что оно работает везде. Другими словами, большая часть ссылок на конкретные спецификации при работе с C ++ заключается в том, чтобы уточнить, насколько конкретно переносимо использование языка.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.