【问题标题】:c++ : comma separated list in using declarationc ++:使用声明中的逗号分隔列表
【发布时间】:2023-12-27 17:32:02
【问题描述】:

为什么在 c++ 的 using 声明语句中使用逗号分隔列表是一种不好的做法?

例如

using std::cout;
using std::cin;
using std::endl;

被认为是比

更好的代码
using std::cout,std::cin,std::endl;

如果代码包含逗号分隔的 using 声明列表,一些编译器(例如 gcc)甚至会发出警告。

当然,最好的做法是对标识符使用完全限定的名称。

【问题讨论】:

  • using std::cout,std::cin,std::endl; 的语法是否合法?这个我没见过,VS也不接受。
  • 您可以发布这些警告之一......它可能已经表明了答案。无论如何,cppreference 声明 using declarator-list ; 仅是 C++17。所以这可能就是原因。
  • 我从未见过这种声明...
  • 什么警告?
  • 显然它是 C++17 的东西。

标签: c++ using using-declaration


【解决方案1】:

cppreference 所述,表单

使用 declarator-list;

仅从 C++17 开始可用。

如果您阅读了警告,您的编译器可能会告诉您这一点!

【讨论】:

  • 干得好。事实上,警告可能会建议 OP 打开-std=c++17 ;)
【解决方案2】:

从另一边走近,不赞成横向列表的原因:

  1. using std::cout; 在我的屏幕上大约有一英寸宽。这使得眼睛只需很少的水平移动就可以阅读它,并且到下一行的垂直距离比阅读一个项目然后下一个项目要短得多......大多数人可以更快地阅读垂直滚动。

  2. 接下来,垂直排列,您往往会得到更容易识别的图案。对于大多数读者来说,流氓stb:: 将在std::s 的阵容中脱颖而出。不多,但它可能会为您节省编译时间,并且在某些情况下编译可能需要很长时间。

  3. 插入、删除或更改 using 声明将更容易在文件差异输出中找出,如果它位于单独的行中。如果更改全部在线隐藏,则必须扫描两行并运行 Mark 1 Eyeball diff 以找出更改的内容,而 Mark 1 Eyeball 和人类 CPU 真的很擅长这样做。

【讨论】:

  • 我在想我们可以将读者指向对多行变量声明的反对意见并涵盖大部分共同点(尽管using 并没有那么容易出错) .