扫描声明后的逗号?

Ste*_*fan 1 c++ scanf comma-operator

不是我的代码,而是来自这里.在read_data()函数中有一个scanf,后面还有我之前看不到的东西.它有什么作用?是STL吗?

scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
Run Code Online (Sandbox Code Playgroud)

tem*_*def 7

这是逗号运算符的用法.逗号运算符非常罕见地使用,将一堆表达式作为单个表达式排列在一起.在这种情况下,声明

scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
Run Code Online (Sandbox Code Playgroud)

意思是"做scanf,然后调用pb(b)G[a],然后调用deg[b]++,以评估的结果deg[b]++.

我看到它在这种情况下使用:

for(i = 1; i <= M; i++)
    scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
Run Code Online (Sandbox Code Playgroud)

老实说,这让我觉得风格很差.写这个会更好:

for(i = 1; i <= M; i++) {
    scanf("%d %d\n", &a, &b); 
    G[a].pb(b);
    deg[b]++;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在功能上是等效的,并且更具可读性 - 您不必发布到Stack Overflow或了解C++语言的奇怪细节以弄清楚它的含义.:-)