В чем отличия C++ и C# ?
==========================

 Доброго времени суток.  

Хочу начать программировать, но в самом начале хочу разобраться с языками.  

1) Подскажите пожалуйста чем отличаются C++ и C#?  

2) Насколько они похожи по синтаксису?  

3) Возможно ли изучая например C++ "переключится" на C#, не прибегая к изучению всего языка с 0?  

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

5) С какого языка проще начать ? 

 Тут все пишут про отличия. Рискну написать про сходства.  
  

Во-первых, о чём бы ни писала [Елена](http://toster.ru/user/Nidora) и Си++ и C# - оба языки общего назначения. Даже больше, оказывается - C# ни разу не заточён под объёмную библиотеку (или фреймворк) .NET, однако с ним намного, много проще. Но если таки учитывать .NET, то для Си++ есть Boost и Qt, так что здесь скорее паритет - библиотек для обоих хватает.  

Во-вторых, сложность разработки на Си++ часто преувеличена. Разве только дисциплины надо поболее - выстрелить в ногу здесь попроще. Однако при этом Си++ будет чутка более гибкий и без танцев с бубнами unmanaged код не запустить на C#. Если внезапно потребуется.  

В-третьих, оба языка, раз они общего назначения, таки мультипарадигмальные. То есть они реализуют большинство практик. И хотя Си++ развивается довольно медленно, сейчас Си++ резко догнал C# в плане нереализованных фич (здесь как минимум лямбды). Ну и метапрограммирования у Си++ поболее будет (наглая ложь).  

В-четвёртых, оба языка кроссплатформеные. Впрочем, C# будет более кроссплатформенный, чем Си++. Разве только тот же Qt резко стёр границы, но это не значит почти ничего - C# компилируется в тот же самый CIL для всех платформ, Си++ - в совершенно разный код для разных платформ (i386, amd64, ARM Cortex-AXX).  

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

Различия, которые казалось бы делают языки совершенно разными, таки не столь принципиальны на том уровне абстракции, на котором был задан вопрос. А различия действительно колоссальны: C# - managed код, что означает, что скомпилированный код будет исполнятся не на прямую в CPU, а на специальной виртуальной машине. Это съедает производительность, но сильно облегчает перенос кода. Ну и потом, C# - полупроприетарный ответ Java (что интересно, так как получается, что C# - более свободный, чем Java), которая была создана как замена сложному и небезопасному C++ в том числе.  
  

В общем, как человек, который начал давно с C#, продолжив C++ и по пути изучив Python, Java, D и другую ООП-чушь могу с уверенностью сказать, что разницы в общем-то и нет... То есть придётся немного проникнуться в чуть другую философию и выяснить, какие проблемы более новый язык пытался решить. Но если подходить к этому, как подошёл [lookid](http://toster.ru/user/lookid), то это скорее не как изучать языки одной языковой группы, а как изучать один и тот же язык в разное время или в разных сферах.  
  

Почему так? Потому что ООП... Оно как бы ООП, ничего сверхъестесственного ни один язык не предлагает, это не Haskell, и тем более не Brainfuck. Так что принципиально общие вещи в них будут. То подмножество, что реализует машину Тьюринга - у них общие. Сами посмотрите: циклы, ветвления, передача аргументов, арифметика... С небольшими правками всё совершенно одинаковое. Да, [Дмитрий](http://toster.ru/user/EvilsInterrupt) совершенно прав, traits на C# не повторишь, ибо та аналогия будет уже не traits, однако... Это уже [programming\_language] related, то есть это попытка совладать с особенностями.  
  

Немного пруфов: лично я ходящий пруф. Зная C++ и C# и немного Java я просто начал программировать на Python. При том, что Python даже алголоподобным не принадлежит. А всё потому, что логика одна и та же, хотя различий между Python и C(++|#) намного, много больше. Но не читая почти никаких туториалов, пройдясь галопом по европам с документацией сейчас я знаю python достаточно для серьёзного проекта.  
  

UPD. По поводу метапрограммирования... Таки рантайм рефлекшн шарпа тащит. И хотя ни макросов, ни шаблонов, ничего. Но изменять код на лету - это уже очень круто. По дефолту плюсы так не умеют, и хотя шаблоны с макросами тащат, сильно, очень сильно тащат и вытаскивают его, Си++, со дна, надо признать - рефлешн у шарпа будет поинтереснее. Извиняюсь за дезу. 

 Вы немного не понимаете масштабы. Язык программирования это как иностранный язык. Программировать под, это как писать статьи в журнале про что-либо. Фактически отличие в С++ и C#, как между английским и немецким. Писать на них под андроид, это как писать статьи по машиностроению или строительству на английском и немецком. Перейти всегда можно, область сменить всегда можно. Но, что бы стать хорошим кодером в чем-то нужно потратить время на изучение предметной области и языка. Вы можете писать про местные соревнования по гонкам и с помощью переводчика, но будет не то. Так что готовьтесь, что придется посидеть и поизучать, а не сразу убийц энгрибердс писать. 

 Изучал C# после 5 лет C++.  
  

2)Синтаксис C# - Си-подобный, но различий прилично.  

3)С нуля вполне возможно переключится, но по первости делать многие вещи вы будете не так, как предлагают разработчики языка.  

4) Да, есть. Про C# уже сказали, а для C++ есть Qt  
  

Начинать вообще всегда сложно, но мое мнение - лучше с плюсов. Если начнете с шарпов, то зашорите себе мозги конкретно. 

 1.Это абсолютно разные языки.  
**Их области применения практически не пересекаются.**  

2. Их синтаксис мало похож. Откройте код и убедитесь в этом.  

3. Не возможно.  

4. Да, и C# имхо лучший выбор для андроида из-за наличия Unity.  

5. C# удобнее будет в плане изучения. 

[C#](https://ru.wikipedia.org/wiki/C_Sharp) — объектно-ориентированный язык программирования с автоматическим управлением памятью, предназначенный для программирования на платформе .NET.  
  
[C++](https://ru.wikipedia.org/wiki/C%2B%2B) — кросс-платформенный язык программирования общего назначения, совместимый в большинстве случаев с C.  
  

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

Советую начать с C# на примерах. 

 Как новичек новичку скажу по поводу 5 пункта: легче начать с C#, но правильней C++ так как:  

- C++ мультипарадигменный, а C# - нет (чисто ООП)  

- C# решает проблемы, которые в C++ нужно решать самому.  

- C# неявно использует механизмы, которые используются в C++ явно (например, указатели).  
  

Таким образом, практика C++ покажет почему C# устроен так, а не иначе.  
  

P.S.: лучше вообще изучать тот язык, которому тебя сможет обучить кто то знающий =) 

 проще начать с C#, как только вы понимаете программирование в "общем", вам не нужно будет учить яп с 0, нужно будет выучить только синтаксис, подводные камни и общие концепции яп 

 1) Это две разные вселенные. Но при этом можно переключать мозги на разработку в один промежуток времени на С++, а после чашки чая на C#. Если нужно быстро решить проблему и при этом не парится с эффективностью выполнения программы, то C#, иначе при написании системного кода который оооочень много работает на уровне байтов, word,dword то это С++.   

2) То что у них общий дедушка еще не значит что они похожи. Отличий много! Причем действительно много. Используются разные идиомы, трюки, подходы. К примеру C++ идиому traits попробуй повтори на C#. А иногда она очень выручает!!! 

 1) идеологией. корневое отличие - управлением памятью.  

2) по синтаксису операций и операторов схожи.   

3) С C++ на C# можно. в обратную сторону сложнее, но тоже можно.  

4) Можно. но я рядом оговорок, см. в других комментариях.  

5) Если нужны оба, то начинать с C++, так как смотри ответ на вопрос 3.  
  

ИМХО лучше знать оба языка. 

 1) Подскажите пожалуйста чем отличаются C++ и C#?  

Многим, за основую был взят синтаксис и всё. В остальном разница колосальная.  
  

2) Насколько они похожи по синтаксису?  

По синтаксису похожи в основном только на уровне C. Ну и чутка от классов. В остальном разница, в C# generics и C++ templates различаются очень сильно, в первую очередь функционалом. В C# очень много своих фишек, много синтаксического сахара.  
  

3) Возможно ли изучая например C++ "переключится" на C#, не прибегая к изучению всего языка с 0?  

Если хочется знать языки хорошо, то оба надо изучать с нуля. Свои тонкости. C++ компилируемый язык, надо знать тонкости платформ, как хранит данные в памяти и т.д. В C# кажется что-то похоже, а на деле нет, а посмотришь вглубь, так совсем нет. Здесь даже знание одного языка может быть плохим при изучение другого. Ибо название сущности одно, а поведение отличается.  
  

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

C++ NDK в руки и вперед. С C# уже сложнее, вроде как только Xamarin, имеет не мало подводных камней.  
  

5) С какого языка проще начать?  

Начать проще с C#, больше предложений на рынке. Проще сразу начать, но с повышением сложности решаемых задач накосячить становится проще. 

 Я начал с C++, и не жалею, проще потом будет осваивать C#