by konisi » 2006年10月10日(火) 18:53
String型の定義が変更されたことによるエラーの一つに「固定文字列+String型の演算結果をString型に代入できない」と言う内容のものがあったと思うのですが・・・。
どうでしたっけ?
追記(最終改変:19時20分)
AB5の開発者バージョンの一つのβ3での話でした。β3はCP1より後、CP2より前に一部に発表されています。引用すると
こんなことがありました。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします](省略されている)
konisi さんが書きました:定数的文字列同士の加算(?)が出来ません。
コード: 全て選択
Dim A$ As String
A$="test"+"ahya"
山本(管理人) さんが書きました:【"test"+"123" などのLPSTR型のポインタ同士をStringオブジェクトとして認識しない】
演算子オーバーロードの特性上、+演算子から見て左の項にString型オブジェクトがなければなりません。となると、最悪 "test" + StrObj などの演算が行えなくなるのでは!?といった問題が生じますが、β4では要求値がStringオブジェクトの場合は文字列リテラルをStringオブジェクトとして扱うようにしようかと考えています。
ようは、下記のようなケースでリテラル文字列とリテラルStringオブジェクトを識別していこうという考えです。
コード: 全て選択
Dim obj As String
obj="test"+"123" '"test" 及び "123" をString型オブジェクトとして扱う
コード: 全て選択
Dim buffer As LPSTR
buffer="test123" '"test123" をリテラル文字列として扱う
因みに、ここで言うリテラル文字列とは、プロセスメモリ内に用意されるByte型配列データへのポインタになります。当然ながら、Stringオブジェクトは処理にオーバーヘッドを伴うので、高速文字列処理が必要なときはLPSTRやリテラル文字列を扱うことで回避できると考えています。
(ちなみに、CP3の一般公開の前にβ5が一部に発表されている。)
これは演算に対する返り値の話ですが、おそらくこれとほぼ同じ事が関数への引数に対して起こっているものかと思います。
String型の定義が変更されたことによるエラーの一つに「固定文字列+String型の演算結果をString型に代入できない」と言う内容のものがあったと思うのですが・・・。
どうでしたっけ?
追記(最終改変:19時20分)
AB5の開発者バージョンの一つのβ3での話でした。β3はCP1より後、CP2より前に一部に発表されています。引用すると[hide=こんなことがありました。](省略されている)
[quote="konisi"]定数的文字列同士の加算(?)が出来ません。
[code]Dim A$ As String
A$="test"+"ahya"[/code][/quote]
[quote="山本(管理人)"][b]【"test"+"123" などのLPSTR型のポインタ同士をStringオブジェクトとして認識しない】[/b]
演算子オーバーロードの特性上、+演算子から見て左の項にString型オブジェクトがなければなりません。となると、最悪 "test" + StrObj などの演算が行えなくなるのでは!?といった問題が生じますが、β4では要求値がStringオブジェクトの場合は文字列リテラルをStringオブジェクトとして扱うようにしようかと考えています。
ようは、下記のようなケースでリテラル文字列とリテラルStringオブジェクトを識別していこうという考えです。
[code]Dim obj As String
obj="test"+"123" '"test" 及び "123" をString型オブジェクトとして扱う[/code]
[code]Dim buffer As LPSTR
buffer="test123" '"test123" をリテラル文字列として扱う[/code]
因みに、ここで言うリテラル文字列とは、プロセスメモリ内に用意されるByte型配列データへのポインタになります。当然ながら、Stringオブジェクトは処理にオーバーヘッドを伴うので、高速文字列処理が必要なときはLPSTRやリテラル文字列を扱うことで回避できると考えています。
[/quote](ちなみに、CP3の一般公開の前にβ5が一部に発表されている。)[/hide]これは演算に対する返り値の話ですが、おそらくこれとほぼ同じ事が関数への引数に対して起こっているものかと思います。