Воскресенье, 24 Ноября 2024, 01:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Какого значение скобок?
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)
Тогда почему работает это?

Жесть. Никогда так не кодил. Зато, в очередной раз, убедился в гибкости С++ smile


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
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.

Сорри за офтоп wink
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 лишены таких проблем с приведением типов. У нас нет понятия байт, флоат, инт и т.д. Число для нас это объект smile Но тут вылезают свои минуса smile


@noTformaT


Сообщение отредактировал noTformaT - Среда, 25 Января 2012, 21:35
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг