C++ (программистское)
Mar. 15th, 2004 10:21 pmПроверьте себя: сумеете ли вы правильно ответить, не запуская, что должна напечатать эта программа:
Я вот не смог, ошибся в одном месте. Значит ли это, что я не помню C++? Наверняка. Я много лет не писал на нём (в отличие от C, на котором пишу время от времени). Но знаете что? я пока не соскучился.
Нафиг, нафиг. Java, C#, да что угодно пусть придёт, но от этого плюсплюсного конгломерата сложных и плохо продуманных синтаксических сталагмитов пора избавляться.
Хотите ещё один курьёз? Пожалуйста. Вот такой код:
что напечатает?
Думаете, "x=101 y=101"? А вот и нет. Он напечатает "x=1 y=101". Угадайте почему.
Когда кто-то писал комментарий, в конце строки вопросительных знаков случайно отпустил shift, и получил слэш. А ??/ — это триграф, обозначающий бэкслэш, т.е. \, и этот \ съедает следующий за ним \n, и делает строку ++x; частью комментария.
Про триграфы можно прочитать здесь. Там же про диграфы есть. Вы знаете, что в C++ можно использовать "and" и "or" вместо && и ||? Я не знал.
Да, кстати, правильные ответы и объяснения по поводу первого куска кода есть здесь. Там же есть ещё много сложных вопросов и мини-статей по синтаксису и возможностям C++.
#include <iostream>
#include <complex>
using namespace std;
class Base {
public:
virtual void f( int ) {
cout << "Base::f(int)" << endl;
}
virtual void f( double ) {
cout << "Base::f(double)" << endl;
}
virtual void g( int i = 10 ) {
cout << i << endl;
}
};
class Derived: public Base {
public:
void f( complex<double> ) {
cout << "Derived::f(complex)" << endl;
}
void g( int i = 20 ) {
cout << "Derived::g() " << i << endl;
}
};
void main() {
Base b;
Derived d;
Base* pb = new Derived;
b.f(1.0);
d.f(1.0);
pb->f(1.0);
b.g();
d.g();
pb->g();
delete pb;
}
Я вот не смог, ошибся в одном месте. Значит ли это, что я не помню C++? Наверняка. Я много лет не писал на нём (в отличие от C, на котором пишу время от времени). Но знаете что? я пока не соскучился.
Нафиг, нафиг. Java, C#, да что угодно пусть придёт, но от этого плюсплюсного конгломерата сложных и плохо продуманных синтаксических сталагмитов пора избавляться.
Хотите ещё один курьёз? Пожалуйста. Вот такой код:
#include <iostream>
#include <complex>
using namespace std;
int main() {
int x=1, y=1;
for( int i = 0; i < 100; ++i ) {
++y;
// What will the next line do? Increment???????????/
++x;
}
cout << "x=" << x << " y=" << y <<endl;
return 0;
}
что напечатает?
Думаете, "x=101 y=101"? А вот и нет. Он напечатает "x=1 y=101". Угадайте почему.
Когда кто-то писал комментарий, в конце строки вопросительных знаков случайно отпустил shift, и получил слэш. А ??/ — это триграф, обозначающий бэкслэш, т.е. \, и этот \ съедает следующий за ним \n, и делает строку ++x; частью комментария.
Про триграфы можно прочитать здесь. Там же про диграфы есть. Вы знаете, что в C++ можно использовать "and" и "or" вместо && и ||? Я не знал.
Да, кстати, правильные ответы и объяснения по поводу первого куска кода есть здесь. Там же есть ещё много сложных вопросов и мини-статей по синтаксису и возможностям C++.
no subject
Date: 2004-03-15 01:27 pm (UTC)Именно так. Зло.
Или вы хотите сказать, что развитие этих языков лучше запланировано, чем C++, и с появлением в них новых возможностей, это всё будет выглядеть лучше, чем то, как развивается C++?
Планирование развития языка - это, простите, оксюморон.
Вы берётесь утверждать, что код на C# и Java, когда в них появятся шаблоны (а они там появятся -- есть и в Tiger, и в C#v2), будет намного лучше выглядеть?
Насчет C# я и не сомневался.
А хороший код с использованием шаблонов обычно читается (с некоторой привычкой, конечно) легче, чем код аналогичной функциональности без них.
Гы, читать-то его легко. А вот если код ведет себя не так как следует из чтения, тогда и приходит просветление.
no subject
Date: 2004-03-15 01:37 pm (UTC)Ну тогда просто no comments. Это (по крайней мере, шаблоны -- множественное наследование, всё-же, несколько спорно) явный путь развития языков -- все пришли к этому, не смотря на всё сопротивление к введению этого, которое было, например, в Java. Это просто слишком нужный и мощный механизм.
Такая точка зрения -- примерно то же, что многие поначалу говорили про ООП.
Планирование развития языка - это, простите, оксюморон.
Не всегда. То, как и в каком направлении будет развиваться язык, всё-же, планируют :) И мне кажется, что даже у такой неповоротливой структуры, как комитет стандартизации C++, это получается лучше, чем в кулуарах Sun или MS.
А что вы считаете лучшим на сегодня языком?
no subject
Date: 2004-03-15 02:35 pm (UTC)no subject
Date: 2004-03-16 01:57 am (UTC)Обычно такая фраза в применении к шаблонам это, увы, значит, что ими просто не умеют пользоваться, и ничего больше. Если насильно и редко их использовать, то да, они опасны, как и любой инструмент, который не умеешь использовать.
no subject
Date: 2004-03-15 11:24 pm (UTC)no subject
Date: 2004-03-16 02:53 am (UTC)Для разработки в полном масштабе -- зависит от, но опять от C++ или java или C# не особо куда уйдёшь :( Именно в доводку этих языков вкладываются основные силы индустрии, отсюда поддержка, библиотеки, etc.
no subject
Date: 2004-03-15 01:42 pm (UTC)