Какого значение скобок?
|
|
JoraKornev | Дата: Среда, 25 Января 2012, 01:18 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Всем привет! В данный момент занимаюсь переносом одного примера с Си++, на другой язык, полистал учебники по синтаксису языка и воде бы все хорошо, но не могу понять вот что: Допустим такой код, Пле[Бла] = Фли[Бла] * Бла / на что то там; Так вот собственно такой вопрос: Какого значение квадратных скобок? Что да как и желательно попонятней)) Заранее всем спасибо)
|
|
| |
noTformaT | Дата: Среда, 25 Января 2012, 01:23 | Сообщение # 2 |
Ukrainian independent game developer
Сейчас нет на сайте
| ну, скобки используются в массивах, в первую очередь в индексных массивах. [] - доступ к определенному элементу массива с определенным индексом. если myArray это переменная массив, то myArray[10] вернет 11 элемент массива, в с++ с нуля идет отчет. В целом, вот ответ. Индексный массив
@noTformaT
|
|
| |
JoraKornev | Дата: Среда, 25 Января 2012, 01:27 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| noTformaT, Спасибо! Выручил сейчас буду разбираться) Слушай, а вот еще вопрос маленький: Допусти А += В тоже самое что и А = А + В, а что дает то? простота написания или ускоряет работу?
|
|
| |
Riketta | Дата: Среда, 25 Января 2012, 05:07 | Сообщение # 4 |
Strategist
Сейчас нет на сайте
| Простота написание, приятнее код. Работу, нет. Компилятор и то, и то в одно переведет все равно. Это удобнее тогда, когда у тебя что-то вроде: Code textBoxLOG.Text += "Время ожидания ответа по умолчанию: " + TimeOut + " Миллисекунд (" + TimeOutSec + " секунд)" + Environment.NewLine; Code textBoxLOG.Text = textBoxLOG.Text + "Время ожидания ответа по умолчанию: " + TimeOut + " Миллисекунд (" + TimeOutSec + " секунд)" + Environment.NewLine;
Это шарпокод (CSharp, C#), но в C++ с учетом его синтаксиса, будут ситуации и похлеще, это чище, красивее, удобнее.
Fougerite - Rust Server OpenSource API TerraDev - Terraria OpenSource Hack
|
|
| |
Apati | Дата: Среда, 25 Января 2012, 10:50 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Quote (JoraKornev) Допусти А += В тоже самое что и А = А + В, а что дает то? Riketta, правильно сказал, добавлю еще, что благодаря оператору "+=", операнд "А" вычисляется только один раз вместо двух. Это дает оптимизацию в некоторых случаях, например когда операндом "А" является функция, возвращающая указатель на какой-то объект, например: Code int& FindMaxElement(){/*поиск максимального элемента*/} ... FindMaxElement() += 10; //поиск элемента происходит один раз FindMaxElement() = FindMaxElement() + 10;//а здесь дважды
|
|
| |
Stage | Дата: Среда, 25 Января 2012, 13:46 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Quote Это шарпокод (CSharp, C#), но в C++ с учетом его синтаксиса, будут ситуации и похлеще, это чище, красивее, удобнее. Да у тебя говнокод обычный, вместо String.Format городить нечитаемые конструкции с плюсами.
|
|
| |
Rorschach | Дата: Среда, 25 Января 2012, 13:55 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Apati, как функция может быть lvalue? Или в шарпе все-таки может?
Never compromise. Not even in the face of Armageddon.
|
|
| |
Apati | Дата: Среда, 25 Января 2012, 13:58 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Quote (Rorschach) Apati, как функция может быть lvalue? Или в шарпе все-таки может? Я привел пример на С++. В шарпе не уверен, но по-моему может.
|
|
| |
Rorschach | Дата: Среда, 25 Января 2012, 14:02 | Сообщение # 9 |
участник
Сейчас нет на сайте
| В С++ не может, поэтому я и подумал, что это какой-то другой язык :Р
Never compromise. Not even in the face of Armageddon.
|
|
| |
Monteg | Дата: Среда, 25 Января 2012, 14:03 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Зачем создавать тему с очевидными вопросами, ответы на которые найдутся в любой книжке?
|
|
| |
noTformaT | Дата: Среда, 25 Января 2012, 14:05 | Сообщение # 11 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Rorschach) В С++ не может, поэтому я и подумал, что это какой-то другой язык :Р мммм, int& FindMaxElement() - возвращает ссылку. вроде бы как должно сработать, хотя такой техники кодинга не видел.
@noTformaT
|
|
| |
Apati | Дата: Среда, 25 Января 2012, 14:10 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| Quote (Rorschach) В С++ не может Тогда почему работает это?: Code #include <iostream>
int& f(){static int i=0; return i;} int main() { f()++; std::cout<< f() << std::endl; f()+=2; std::cout<< f() << std::endl; f()*=3; std::cout<< f() << std::endl; f()=999; std::cout<< f() << std::endl; return 0; }
|
|
| |
Rorschach | Дата: Среда, 25 Января 2012, 14:41 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Работает, потому что в качестве lvalue здесь не функция а int, то есть возвращаемое значение, которое я проморгал выше.
Never compromise. Not even in the face of Armageddon.
|
|
| |
Aikidos | Дата: Среда, 25 Января 2012, 14:42 | Сообщение # 14 |
постоянный участник
Сейчас нет на сайте
| Quote (Apati) Тогда почему работает это? Жесть. Никогда так не кодил. Зато, в очередной раз, убедился в гибкости С++
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Stage | Дата: Среда, 25 Января 2012, 14:48 | Сообщение # 15 |
постоянный участник
Сейчас нет на сайте
| Quote Зато, в очередной раз, убедился в гибкости С++ Это не гибкость - это возможность выстрелить себе в ногу.
|
|
| |
Apati | Дата: Среда, 25 Января 2012, 15:09 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Quote (Stage) Это не гибкость - это возможность выстрелить себе в ногу. Дай дураку пистолет - так он не только ногу прострелит, но и других поубивает.
|
|
| |
Stage | Дата: Среда, 25 Января 2012, 15:12 | Сообщение # 17 |
постоянный участник
Сейчас нет на сайте
| Quote Дай дураку пистолет - так он не только ногу прострелит, но и других поубивает. Любимая басня плюсо-кодеров.
|
|
| |
Coment | Дата: Среда, 25 Января 2012, 17:40 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
| Кстати интересный как для меня момент, правда не с плюсов взят. Если в Java написать:
byte b=2;
b+=2; // все гут.
а вот:
b=b+2;// даст ошибку . Идет преобразование int к byte.
Сорри за офтоп
|
|
| |
Matou | Дата: Среда, 25 Января 2012, 20:54 | Сообщение # 19 |
Исходный коТ
Сейчас нет на сайте
| Quote (noTformaT) мммм, int& FindMaxElement() - возвращает ссылку. вроде бы как должно сработать, хотя такой техники кодинга не видел. А где смотрел?
class String{ //... String& operator=(String& s){ //... return *this; } //... };
class Pointer{ //... Ptr p; Pointer& operator*() {return *p}; //... };
Перегрузка операторов приравнивания, инкремента/декремента, разыменования, взятия индекса только на этом принципе и основана.
Сообщение отредактировал Matou - Среда, 25 Января 2012, 20:56 |
|
| |
noTformaT | Дата: Среда, 25 Января 2012, 21:35 | Сообщение # 20 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Matou) А где смотрел? Quote (Matou) Перегрузка операторов приравнивания, инкремента/декремента, разыменования, взятия индекса только на этом принципе и основана. не спорю, но все же подобный код или что-то подобное: myFunc() = 10 + MyFunc(); Не встречал.
Одно дело "перегрузка операторов", другое дело код который выше.
Кстати, решил попробовать реализовать код выше на ас3. Хотя там все передается по ссылке, но нифига не работает.
Code function getNum():Number { var a:Number = new Number(); return a; }
getNum() += 10; И слава богу.
Quote (Coment) даст ошибку . Идет преобразование int к byte. эта ошибка есть не только в джаве, в шарпе например тоже. К счастью ас3 программисты и js лишены таких проблем с приведением типов. У нас нет понятия байт, флоат, инт и т.д. Число для нас это объект Но тут вылезают свои минуса
@noTformaT
Сообщение отредактировал noTformaT - Среда, 25 Января 2012, 21:35 |
|
| |