エラー、バグ、質問 - ページ 1730

 
Ilyas:
そうです、ここでのタイピングでは、T = A * です。

すると、ここでコンパイルエラーが発生します

template<typename T>
void f1( const T  const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2( const A* const & a[] ) {}
class B {
        void g1() const { f1( a ); }
        void g2() const { f2( a ); }
        A *a[];
};
 
Sergei Vladimirov:
その通りです。これだけの主張を読んでも、どこに問題があるのか理解できない。これらのファイルをフロッピーディスクに保存するのですか?


50Kのファイルではなく、100Kのファイルを保存するとディスクが消耗する?(あなたにとって、それは面白いことではありませんか?)

著作権文字(原則的に国際的であり、コードが127より大きいにもかかわらず、すべてのエンコーディングにある)1文字のために、意味もなくファイルサイズが 2倍になるのは正常でしょうか?賢いと思いませんか?なぜ不要なファイルを2倍も肥大化させるのか?

問題なのはサイズだけでなく、文脈検索もです。ファイルがASCIIである限り、ファイルマネージャを含む多くのサードパーティ製プログラムを使用して、コンテキスト文字列を使用してファイルを検索することができます。ほぼ毎日使っています。ネイティブのMQエディタは、他の多くの明らかなコーディングの問題と同様に、この点ではゼロに等しいです。ユニコードができたところで、文脈検索には2つの問題があります。すべてのプログラムがそれを行えるわけではなく、また行えるプログラムでも、ポイント2である遅さが発生します。

もちろん、ソフトウェアがいかに使いやすく効率的であるべきかを考えたり、少なくとも他の製品から学んだりするよりも、ハードディスクに加えてより速いコンピュータを購入する方が簡単だという人もいるでしょう。

 
A100:

すると、ここでコンパイルエラーが発生します

C++でも型の曖昧さがある:const T const

しかし、逃げ道はある - 右に便宜を図る

template<typename T>
void f1(  T         const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2(  A const * const & a[] ) {} //нормально
class B {
        void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
        void g2() const { f2( a ); } //нормально
        A *a[];
};
C++はエラーなくコンパイルできる(構文の違いを考慮すると)
 
A100:

C++でも、型の曖昧さがある:const T const

しかし、逃げ道はある - 右に便宜を図る

C++はエラーなくコンパイルできる(構文の違いを考慮すると)

しかし、論理的には「const A」と「A const」が同じ意味であるのはおかしいのです。

おそらく、「Aconst*」はconstでないオブジェクトへの 定数ポインタなのでしょう。

ということになりそうです。なぜなら、そのような構造が存在するからです。

class A {};
void f( const A const * const & a[] ) {}

ポインタの変更、参照による変更、オブジェクト(複数可)の変更はできません。

高速なコードを得るという観点から、このような構成は、コンパイラが必要とするヒントを与えることができるでしょうか?

 
Stanislav Korotky:

著作権文字1つで(コードが127より大きいにもかかわらず、原則的に国際的であり、すべてのエンコーディングに存在する)、ファイルサイズが2倍になるのは正常でしょうか...。

そうですね。どう考えても、マッチングでセーブする意味がないと思います。
 
興味深いのは、この構造において
class A {};
void f( const A const * & a[] ) {}

要素を変更することはできませんが、配列のサイズを変更 することは可能です。

面白いことに、メソッドは以下のような形になることが判明しました。

class A {};
class B
{
  const A const * Method( const A const * const & a[] ) const
  {
    return(a[0]);
  }
};
 
fxsaber:

Aconst*" は定数オブジェクトへの ポインタではなく、定数ポインタである可能性があります。

パターンでなければ、「A const *」は「const A *」に等しく、パターンであれば、その状況によって(C++で)
 
A100:
パターンでなければ、「A const *」は「const A *」に等しく、パターンであれば、状況によって
だから、等価性はないはずです。MQLは同等と見なしますが
class A
{
public:
  int i;
};

void f( A const * & a[] )
{
  a[0].i = 1; // 'i' - constant cannot be modified
}
私見では、ここに誤りがあると思います。なぜなら、渡されるのは定数ポインタの配列(const *)であって、定数オブジェクトへの ポインタの配列(const A)ではないからです。
 
A100:
具体的には以下の通り - 今後のhttps://www.mql5.com/ru/forum/1111/page1749#comment_2892563 で修正されます。
それなら、あなたの発言に等価性はないはずです
A100:
パターンでなければ,"A const *" は "const A *" に等しく,パターンであれば - その状況によって(C++で )
 
fxsaber:
こういうデザインだと面白いですね...。
class A {};
void f( const A const * & a[] ) {}

の要素は変更できませんが、配列のサイズは変更可能です。

そうなんですか?それは残念だ、そんなことはないはずだ。