Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

const и динамические массивы (строки)   Найти похожие ветки 

 
кгшзх ©   (2016-01-16 22:04) [40]

Удалено модератором


 
Kerk ©   (2016-01-16 22:04) [41]


> Ingener ©   (16.01.16 21:48) [39]
>
> >Меняется. Copy On Write потому что.
>
> эээ. .. как ты свой пример связал с обсуждаемым вопросом?!

Я тебе показал на простом примере, что операция s[1] := "X"; меняет указатель s.


 
Ingener ©   (2016-01-16 22:06) [42]

Удалено модератором


 
кгшзх ©   (2016-01-16 22:08) [43]

Удалено модератором


 
Ingener ©   (2016-01-16 22:13) [44]

Удалено модератором


 
кгшзх ©   (2016-01-16 22:18) [45]

Using const allows the compiler to optimize code for structured - and string-type parameters. It also provides a safeguard against unintentionally passing a parameter by reference to another routine.

Ну чо, будем и дальше рогом упираться?

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

если бы там не уточнялось про структуры и строки, то можно было бы пыхтеть про мифические защиты ЛЮБЫХ типов

Но речь идет именно про оптимизацию передачи структур и строк


 
Ingener ©   (2016-01-16 22:18) [46]

Удалено модератором


 
кгшзх ©   (2016-01-16 22:20) [47]

Удалено модератором


 
Kerk ©   (2016-01-16 22:21) [48]


> Ingener ©   (16.01.16 22:13) [44]
>
> >Я тебе показал на простом примере
> >, что операция s[1] := "X"; меняет
> > указатель s.
>
> бррр. Ну давай возьмем такой пример:

Ты сам с собой разговариваешь? В [31] ты спрашиваешь почему компилятор не разрешает сделать s[1] := "X"; для const-строки, хотя эта операция якобы не изменяет указатель.

Так вот. Указатель меняется. Именно поэтому компилятор не разрешает такую операцию для const-строки. Все в соответствии со справкой.

Та же самая разница как между
procedure Test1(Param: PInteger);
procedure Test2(const Param: PInteger);

Во втором случае компилятор не разрешит изменить значение параметра внутри процедуры. В первом разрешит.


 
Kerk ©   (2016-01-16 22:22) [49]

Удалено модератором


 
Ingener ©   (2016-01-16 22:50) [50]

Удалено модератором


 
DayGaykin ©   (2016-01-17 00:08) [51]


> Я тебе показал на простом примере, что операция s[1] :=
> "X"; меняет указатель s.

Не думал никогда об этом. Действительно так:)


program Project1;

{$APPTYPE CONSOLE}

procedure Test1(S: string);
begin
 Writeln("Test1 Old: ":14, Integer(S));
 S[1] := "D";
 Writeln("Test1 New: ":14, Integer(S));
end;

procedure Test2(var S: string);
begin
 Writeln("Test2 Old: ":14, Integer(S));
 S[1] := "M";
 Writeln("Test2 New: ":14, Integer(S));
end;

var
 GS: String;
begin
 GS := "Say";
 Writeln("Before: ":14, Integer(GS));
 Test1(GS);
 Writeln("After Test1: ":14, Integer(GS));
 Test2(GS);
 Writeln("After Test2: ":14, Integer(GS));
 Readln;
end.

Вот вывод:

     Before: 32673004
  Test1 Old: 32673004
  Test1 New: 32673028
After Test1: 32673004
  Test2 Old: 32673004
  Test2 New: 32673004
After Test2: 32673004


 
Ingener ©   (2016-01-17 01:01) [52]

Удалено модератором


 
Германн ©   (2016-01-17 01:06) [53]


> Sha ©   (16.01.16 16:05) [29]
>
> > Германн ©   (16.01.16 01:34) [28]
> > хочу знать когда параметр передаётся по ссылке
>
> Почему бы просто не передавать адрес переменной в таком
> случае?
> Иногда подходит использование var-параметров.

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


 
han_malign ©   (2016-01-19 16:03) [54]

const char * (*select)(char const * const * list);



Страницы: 1 2 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.025 c
15-1449950981
@!!ex
2015-12-12 23:09
2017.01.15
Как получить обратную матрица?


15-1452933004
Юрий
2016-01-16 11:30
2017.01.15
С днем рождения ! 16 января 2016 суббота


2-1419002742
Вован Петрович
2014-12-19 18:25
2017.01.15
Локализация ПО


3-1310747259
Дмитрий
2011-07-15 20:27
2017.01.15
Вылет при изменении данных в гриде (Eh)


3-1311683275
Patrick1968
2011-07-26 16:27
2017.01.15
Интересная вещь в ADO