我今天看到了有趣的法典:
auto ch = (double(), (float(), int()))[" a
"]["abcdefghij"];
其工作方式如下:
char str[] = "abcdefghij";
char ch = str[ ];
为什么甚至有可能? 尤其是,汇编者为什么会把它作为子稿加以描述和使用,而不是 error错?
我今天看到了有趣的法典:
auto ch = (double(), (float(), int()))[" a
"]["abcdefghij"];
其工作方式如下:
char str[] = "abcdefghij";
char ch = str[ ];
为什么甚至有可能? 尤其是,汇编者为什么会把它作为子稿加以描述和使用,而不是 error错?
我解释说:
auto ch = (double(), (float(), int()))[" a
"]["abcdefghij"];
相当于(对所有<条码>代号、浮标、t中与日志操作员的节奏进行合理评价)
auto ch = (0[" a
"])["abcdefghij"];
现在的标准是:
x[y] == *(x + y)
无论谁是协调人。 您:
0[" a
"] == " a
"[0] == ;
首先,所有<条码>杜布尔条码>和<条码>float 条码>的字眼纯属误导。 com经营者的回报价值是其右侧论点,例如 (double()、 (float()、 int())>
boils下限为int()
,尽管它以这种方式生成和抛弃了double<>/code>和
auto ch = int()[" a
"]["abcdefghij"];
第一部分将评估。
int()[" a
"]
现在,认识到<代码>int(>> 缺损------------------------------------------------------------------------------------- 因此,声明相当于:
0[" a
"]
在C和C++中,“代码>a[b]和b[a]
的相当广为人知的切trick是等值,因为该子规范操作者被定义为<代码>a[b] ==*(a + b),而添加是互换的。 因此,这实际上与:
" a
"[0]
当然,这等于<条码>。 如今,整个法典是:
auto ch = ["abcdefghij"];
出于同样原因,这相当于:
auto ch = "abcdefghij"[ ];
哪一个当然也可以是书面的
char str[] = "abcdefghij";
char ch = str[ ];
如果你给“abcdefghij”以一个名字,并用C++0xauto
。 宣布<代码>ch的关键词。
最后,请注意,等于9,因为表象具有ASCII值9,因此,
str[ ]
与str[9]
.由10个特性组成,随后由NCL 特性终止者(