我同意其他人的看法-它要求名称冲突,含糊不清,然后事实是它不够明确。虽然可以看到的使用using
,但我个人的偏好是限制它。我也强烈考虑其他人指出的内容:
如果您想查找一个可能是一个相当普通的名称的函数名,而只想在std
名称空间中找到它(或者相反,您想更改不在名称空间std
,名称空间X
...中的所有调用),那你打算怎么做呢?
您可以编写一个程序来做到这一点,但是花时间在项目本身上而不是编写一个程序来维护您的项目会更好吗?
就我个人而言,我实际上不介意std::
前缀。我不喜欢它,而不是喜欢它。我不知道这是否是因为它是显式的,并对我说:“这不是我的代码……我正在使用标准库”,或者是否还有其他用途,但我认为它看起来更好。考虑到我最近才刚接触C ++(这可能很奇怪)(使用和仍然使用C和其他语言的时间更长,而C是我一直以来最喜欢的语言,就在汇编之上)。
还有另一件事,尽管它与上述内容以及其他指出的内容有些相关。尽管这可能是不好的做法,但有时我会保留std::name
标准库的版本和名称以用于特定于程序的实现。是的,确实这可能会咬你,再咬你,但是一切都归结于我从头开始这个项目,而且我是唯一的程序员。示例:我重载std::string
并调用它string
。我有一些有益的补充。我这样做的部分原因是因为我的C和Unix(+ Linux)倾向于使用小写名称。
除此之外,您可以具有名称空间别名。这是一个可能未提及的有用示例。我使用C ++ 11标准,尤其是libstdc ++。好吧,它没有完整的std::regex
支持。当然,它可以编译,但是会引发异常,因为它是程序员的错误。但这是缺乏执行力的。
所以这是我解决的方法。安装Boost的regex,并将其链接。然后,我执行以下操作,以便在libstdc ++完全实现它时,我只需要删除此块,并且代码保持不变:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
我不会争论那是一个坏主意。但是,我会争辩说它可以使我的项目保持整洁,同时又要使其具体化:确实,我必须使用Boost,但是我正在使用它,就像libstdc ++最终会使用它一样。是的,从一开始就开始自己的项目并从一个标准(...)开始,在帮助维护,开发以及该项目涉及的所有方面都将走很长的路!
只是为了澄清一些事情:我实际上不认为在STL中故意使用类/任何名称(而是更具体地代替它)是个好主意。对于我来说,字符串是个例外(忽略第一个,上面或第二个,如果需要,请忽略双关),因为我不喜欢“ String”的概念。
实际上,我仍然非常偏向C和偏向C ++。保留细节,我所做的大部分工作都更适合C(但这是一个很好的练习,也是使自己成为一个好方法a。学习另一种语言和b。尽量不要偏向于对象/类/等,这可能更好地表述了更少的胸襟,更少的傲慢和更多的接受。)但是,什么是有用的就是一些已经建议:我确实不使用列表(这是很普通的,不是吗?),和排序(同样的事情)来命名的两个愿引起名称冲突,如果我这样做using namespace std;
,所以为此,我更希望在控制方面具有特定性,并且知道如果我打算将其用作标准用途,则必须指定它。简单地说:不允许假设。
至于使Boost的regex成为的一部分std
。我这样做是为了将来的集成,而且-再次,我完全承认这是偏见-我认为这并不像丑陋boost::regex:: ...
。确实,那对我来说是另一回事。在C ++中,在外观和方法上我还有很多事情要完全接受(另一个示例:可变参数模板与var参数[尽管我承认可变参数模板非常有用!])。即使是那些我接受它是困难的,而且我仍然有问题与他们。