错误、漏洞、问题 - 页 2869

 
A100:

你有一个语法错误--给出一个在括号里有(typename)的工作代码的例子。你还不如在括号里写上(OnStart)。

嗯,没有语法错误

typename(J)

但你已经认为这段代码是语法错误了吗?

(typename)J

当一个类型转换原则应该在这里起作用,而帮助允许这两种变体。

 
Roman:

像这样,没有语法错误。

这算不算是一个语法错误?

当类型转换的原则应该在这里起作用,而帮助允许这两种情况。

template<typename T>

typename不是一个类型,它是一个关键字。在这种情况下,类型是T。转换是到一个类型,而不是到关键字。

哲学上的理由在这里是不合适的。尽管如果MQL是一种抽象的语言,我们也许可以借助于对关键词的铸造,它将上升到排名的第1位。

 
A100:

typename不是一个类型,它是一个关键字。在这种情况下,类型是T。转换是到一个类型,而不是到一个关键字

哲学上的辩解在这里是不合适的。虽然,如果MQL是一种抽象的语言,我们也许可以把它投到关键词上,它就会上升到评级的第一位。

我明白tyename 不是一个类型。
但在这种情况下,我们得到了一个转变。
我们从一个常数中获得其类型。
也许这在语法上是不正确的?但它是有效的。

#define  A '+'

typename(A)
 
Roman:

我明白tyename 不是一个类型。
但在这种情况下,我们得到了一个转变。
从一个常数,我们得到它的类型。
也许这不是正确的语法?但它是有效的。

它是有效的,但不是你认为的那样。你没有得到一个类型,而是一个字符串。我想通过例子向你展示这一点,但我在下面得到一个错误。

但这并不意味着你是对的--只是编译器的另一个错误。

 
编译错误。
void OnStart()
{
    Print(typename("ushort"));      //(1) нормально
    Print(typename(typename('+'))); //(2) Error: 'typename' - unexpected token
}

(1)和(2)之间的区别是什么?亲爱的开发者--也许Roman 是对的,现在typename返回type?

结果是预期的:字符串

 
A100:

它是有效的,但不是以你想象的方式。你没有得到一个类型,而是一个字符串。我想用一个例子来说明,但我得到了一个错误。

它怎么不是一种类型呢?
它是一个类型,不是一个字符串。
ushort不是一个字符串。

#define   A '+'

void OnStart()
{
   Print(typename(A));
   Print(typename("string"));
}
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  ushort
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  string
 
Roman:

它怎么不是一种类型呢?
只是得到一个类型,而不是一个字符串。
Ushort不是一个字符串。

你得到的不是ushort,而是 "ushort"。你明白其中的区别吗? 如果不明白,请先阅读文档 再理解。

尽管如果能得到一条真正的ushort,那就太酷了!

 
A100:

你得到的不是ushort,而是 "ushort"。你明白区别吗? 如果不明白,请阅读文件以了解

所以Print()已经把它打印 成 "ushort",并带有一个字符串字面。
这与它有什么关系?Typename返回的是一个类型名!这一事实本身就说明了这一点。

 
Roman:

所以这已经把Print()打印成 "ushort "字符串字面。
这跟它有什么关系?Typename返回的是一个类型名!这一事实本身就说明了这一点。

你读过链接中的文档吗?那里也有一个例子。不幸的是,我的例子 失败了。

 
A100:

你读过链接上的文件吗?

这与模板有什么关系?
如果使用语法不是用于模板,在这种情况下。