错误、漏洞、问题 - 页 1730 1...172317241725172617271728172917301731173217331734173517361737...3184 新评论 A100 2016.10.14 08:19 #17291 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[]; }; Stanislav Korotky 2016.10.14 09:39 #17292 Sergei Vladimirov: 正是如此。我读了所有这些说法,仍然不明白问题出在哪里。你打算把这些文件存储在软盘上吗?当你保存一个100K的文件而不是50K的文件时,是否会磨损你的磁盘?(你不觉得这很有趣吗?)因为一个版权字符(原则上是国际性的,在所有的编码中都有,尽管它的代码大于127),文件大小 就毫无意义地增加了一倍,这正常吗?这不是很聪明吗?为什么在没有任何需要的情况下将文件膨胀2倍?问题不仅在于尺寸,还在于上下文搜索。只要文件是ASCII格式,你可以使用许多第三方程序,包括文件管理器,使用上下文字符串搜索文件。我几乎每天都在使用这个。原生的MQ编辑器在这方面和其他许多明显的编码问题一样,都是零。一旦我们有了unicode,上下文搜索就有两个问题:不是所有的程序都能或都想这样做,而对于那些能做的程序,我们会得到第2点--缓慢。当然,有些人认为除了硬盘之外,买一台更快的电脑比思考或至少从其他产品中了解软件应该如何方便和高效更容易。 A100 2016.10.14 13:37 #17293 A100:然后这里出现了一个编译错误在C++中也存在着类型的模糊性:Const T const但有一条出路--将建筑向右移动template<typename T>void f1( T const & a[] ) {} //error: 'const' - unexpected tokenclass 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++的编译没有错误(考虑到语法上的不同)。 fxsaber 2016.10.14 13:41 #17294 A100:在C++中,也存在着类型的模糊性: const T const但有一条出路--将建筑向右移动 C++的编译没有错误(考虑到语法上的不同)。但从逻辑上讲,当 "const A "和 "A const "是同一意思时,就很奇怪了。也许"Aconst*"是一个指向非const对象 的常数指针。情况似乎是这样的。因为这样的结构存在。class A {};void f( const A const * const & a[] ) {}你不能改变指针,你不能通过引用来改变,你不能改变对象。从获得快速代码的角度来看,这样的结构能否给编译器一个适当的提示? Sergei Vladimirov 2016.10.14 13:44 #17295 Stanislav Korotky:一个版权字符(原则上是国际性的,在所有编码中都有,尽管它的代码大于127)导致文件大小增加两倍,这是否正常... 是的,就所有的意图和目的而言,我不认为在火柴上节约有什么意义。 fxsaber 2016.10.14 13:53 #17296 有趣的是,在这个结构中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]); } }; A100 2016.10.14 13:54 #17297 fxsaber:有可能"Aconst*"是一个常数指针,而不是一个常数对象 的指针。 如果不是一个模式,那么 "A const *"等于 "Const A *",如果是一个模式,按这种情况(在C++中),就等于 fxsaber 2016.10.14 13:59 #17298 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)。 fxsaber 2016.10.14 14:07 #17299 A100: 具体来说是这样的--在未来修复https://www.mql5.com/ru/forum/1111/page1749#comment_2892563 那么,在你的声明中就不应该有任何等同的内容A100: 如果不是一个模式,那么 "A const *"等于"Const A *",如果是一个模式--按这种情况(在C++中),则 TheXpert 2016.10.14 14:19 #17300 fxsaber: 有趣的是,在这样的设计中...class A {};void f( const A const * & a[] ) {}元素不能被改变,但数组的大小可以被改变。 真的吗?这真让人扫兴,不应该是这样的。 1...172317241725172617271728172917301731173217331734173517361737...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就对了,在这里打字,T = A *
然后这里出现了一个编译错误
正是如此。我读了所有这些说法,仍然不明白问题出在哪里。你打算把这些文件存储在软盘上吗?
当你保存一个100K的文件而不是50K的文件时,是否会磨损你的磁盘?(你不觉得这很有趣吗?)
因为一个版权字符(原则上是国际性的,在所有的编码中都有,尽管它的代码大于127),文件大小 就毫无意义地增加了一倍,这正常吗?这不是很聪明吗?为什么在没有任何需要的情况下将文件膨胀2倍?
问题不仅在于尺寸,还在于上下文搜索。只要文件是ASCII格式,你可以使用许多第三方程序,包括文件管理器,使用上下文字符串搜索文件。我几乎每天都在使用这个。原生的MQ编辑器在这方面和其他许多明显的编码问题一样,都是零。一旦我们有了unicode,上下文搜索就有两个问题:不是所有的程序都能或都想这样做,而对于那些能做的程序,我们会得到第2点--缓慢。
当然,有些人认为除了硬盘之外,买一台更快的电脑比思考或至少从其他产品中了解软件应该如何方便和高效更容易。
然后这里出现了一个编译错误
在C++中也存在着类型的模糊性:Const T const
但有一条出路--将建筑向右移动
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++中,也存在着类型的模糊性: const T const
但有一条出路--将建筑向右移动
C++的编译没有错误(考虑到语法上的不同)。但从逻辑上讲,当 "const A "和 "A const "是同一意思时,就很奇怪了。
也许"Aconst*"是一个指向非const对象 的常数指针。
情况似乎是这样的。因为这样的结构存在。
void f( const A const * const & a[] ) {}
你不能改变指针,你不能通过引用来改变,你不能改变对象。
从获得快速代码的角度来看,这样的结构能否给编译器一个适当的提示?
一个版权字符(原则上是国际性的,在所有编码中都有,尽管它的代码大于127)导致文件大小增加两倍,这是否正常...
void f( const A const * & a[] ) {}
你不能改变元素,但你可以改变数组的大小。
有趣的是,事实证明,方法可以是这样的
class B
{
const A const * Method( const A const * const & a[] ) const
{
return(a[0]);
}
};
有可能"Aconst*"是一个常数指针,而不是一个常数对象 的指针。
如果不是一个模式,那么 "A const *"等于 "Const A *",如果是一个模式,那么根据情况
{
public:
int i;
};
void f( A const * & a[] )
{
a[0].i = 1; // 'i' - constant cannot be modified
}
具体来说是这样的--在未来修复https://www.mql5.com/ru/forum/1111/page1749#comment_2892563
如果不是一个模式,那么 "A const *"等于"Const A *",如果是一个模式--按这种情况(在C++中),则
有趣的是,在这样的设计中...
void f( const A const * & a[] ) {}
元素不能被改变,但数组的大小可以被改变。