Mq-b / Modern-Cpp-templates-tutorial

现代C++模板教程

Home Page:https://mq-b.github.io/Modern-Cpp-templates-tutorial/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

模板函数中无表达意义的下划线数组

MrShinshi opened this issue · comments

如果这是你的个人 癖好请去掉,如果不是请解释不这样可能在哪些情形下导致什么后果.

_ 代表它毫无意义。

_ 可以代表毫无意义,但是

int[]_{ ( do sth , ... ) }; 

这个写法必须是有意义的(比如"不这么写会导致某些编译器不进行展开"之类的理由), 不然我就想到new之后 == nullptr了

_ 可以代表毫无意义,但是

int[]_{ ( do sth , ... ) }; 

这个写法必须是有意义的(比如"不这么写会导致某些编译器不进行展开"之类的理由), 不然我就想到new之后 == nullptr了

原文

很明显是为了打印,对,但是为啥要括号里加个逗号零呢?这是因为逗号表达式是从左往右执行的,返回最右边的值作为整个逗号表达式的值,也就是说:每一个 (std::cout << arg0 << ' ' ,0) 都会返回 0,这主要是为了符合语法,让它能正常执行。我们创建了一个数组 int _[] ,最终这些 0 会用来初始化这个数组,当然,这个数组本身没有用,只是为了符合语法。

那为什么不采用如下写法

template <typename...Args>
void print(Args&&...args)
{
    ((std::cout << args),...);
}

因为还没讲到折叠表达式

折叠表达式是专题

新老写法都要学学

那就应该标注这个是老写法, 或者干脆使用新写法但告诉他们 :

"这个写法需要C++xx之后才能使用, 老写法请参考 折叠表达式 专题."

在 Markdown 交流中 “>” 通常表示引用,补充等意思,你这语法一写出来我还是思考了一下。

尤其是这种对话 “>” 几乎只表示引用。

酱紫,学习了

那就应该标注这个是老写法, 或者干脆使用新写法但告诉他们 :

"这个写法需要C++xx之后才能使用, 老写法请参考 折叠表达式 专题."

这几乎是不可行的,如果不准备在当前就讲新内容,而是直接说明这是老式写法,大大降低学习欲望,应当留到小节最后说明还会有新的写法进行形参包展开。

或者在开头表示“先不讲xxx“,但是这其实没用,这种话说出来就是给懂的人看的,不懂的人根本不知道也不需要看这句话。

只能bb一句:

本节先默认 C++14 标准

那换个思路, 干脆把你那"魔法"出来的折叠表达式删掉, 提一句

C++xx 之前是不支持 折叠表达式 的, 关于折叠表达式的部分请参考 折叠表达式 专题

至于读者怎么魔是读者的问题, 你直接带头魔却不准确的表达出来是不妥当的

没问题,我现在的表述非常好,不需要别的徒增烦恼

看了下 commit, 还行