草庐IT

nameSpace

全部标签

c++ - 作为模板参数的内部类型

ISO98/03标准(第14.3.1节)似乎禁止使用具有内部链接的类型作为模板参数。(参见下面的示例。)C++11标准没有。G++-使用旧标准-允许它。是我误读了03标准,还是g++只是放任自流?namespace{structhidden{};}templatestructS{Tt;};intmain(){Ss;return0;} 最佳答案 你是对的,C++03不允许使用具有内部链接的类型作为模板类型参数,而C++11允许。不过,我似乎记得,匿名命名空间内的定义仍然具有外部链接。是的,第3.5节[basic.link]说Aname

c++ - 我应该将 "using namespace"放在 C++ 中的命名空间内部还是外部

我的导师在代码审查中这样修改了我的代码:usingnamespaceA;//definedinotherfilesnamespaceB{//dosomething}而不是像这样:namespaceB{usingnamespaceA;//dosomething}将using命名空间放在命名空间之外是否有任何技术原因? 最佳答案 在头文件中,您不应该在全局范围内使用usingnamespaceN;指令。它将在所有客户端代码上强制使用来自N的大量标识符。但是将它放在命名空间X中也可以。请记住,执行usingnamespaceX;的客户端代

c++ - 匿名 namespace 内部/外部的 Typedef?

在.cpp文件中,这两种方式有什么区别/偏好吗?//filescopeoutsideanynamespaceusingX::SomeClass;typedefSomeClass::BufferMyBuf;速度/速度namespace{//anonymoususingX::SomeClass;typedefSomeClass::BufferMyBuf;} 最佳答案 我会说第二种用法相当不常见,至少在我目前看到的代码中是这样(而且我已经看到相当多的C++代码)。您能解释一下第二种技术背后的原因吗?您通常会在C++实现文件中使用匿名命名空

c++ - 非本地 C++11 lambda 是否存在于匿名 namespace 中?

GCC4.8的最新版本在头文件中提供了以下代码:autoL=[](){};structS{decltype(L)m;};以下警告:test.hpp:3:8:warning:'S'hasafield'S::m'whosetypeusestheanonymousnamespace[enabledbydefault]structS^为什么编译器会考虑使用匿名命名空间的lambda类型?我将lambda设为全局,我没有在任何地方使用匿名命名空间。更新:即使我将lambda放在显式命名空间中,编译也会给出相同的警告,如下所示:namespaceN{autoL=[](){};}structS{de

c++ - 命名空间别名范围问题

我有一个头文件,我希望在其中定义类时使用namespace别名。但是,我不想将此别名暴露给包含头文件的任何内容。//foo.hnamespacequx=boost::std::bar::baz::qux;//!exposedtotheworldclassfoo{//can'tputanamespacealiashere//stuffusingqux::};我如何才能为类声明命名空间而不会泄露到任何地方? 最佳答案 namespaceMyClassSpace{namespacequx=boost::std::bar::baz::qux

c++ - 使用命名空间标准和库

为什么我们既需要“头文件”又需要usingnamespace任何库函数的标记才能正确执行。例如cout除非我们使用iostream否则将无法工作.除非我们使用“使用命名空间标准”,否则它也不会工作。我的问题是为什么我们需要两者的结合usingnamespacestd以及#include对于cout执行成功? 最佳答案 包含库header可使库功能对您的程序代码可见。否则,您的程序甚至不知道库的存在。这是必要的部分。编写usingnamespacestd只允许您编写cout而不是全名std::cout。这是一个方便,仅此而已。

c++ - 继承和命名空间

我正在尝试使用一些namespace使用我的第一个有用的面向对象程序。我有一个基类B,它位于命名空间NS中。如果我尝试从中继承基类获得继承工作,我应该在类decleration中使用NS::B,如下所示,真的是这样吗?或者对于这种继承语法是否有更广泛接受的语法?namespaceNS{classD:publicNS::B{...};}最好的,乌穆特 最佳答案 如果您的D在namespaceNS中,您不必限定NS::B,因为D和B在同一个命名空间中。您可以只使用classD:publicB。

c++ - 我应该在实现文件中使用未命名的 namespace 吗?

我在一个外部*.cpp文件中定义了一些函数(这里不涉及类),当然还有一个合适的*.h文件。*.cpp文件中的某些函数仅在该*.cpp文件中无处使用。*.h文件中甚至没有提及它们。我应该将这些函数放入一个未命名的命名空间中,还是它们可以紧挨着其他函数存在?如果是这样,为什么我需要为它们使用一个未命名的命名空间?我看不出有什么问题,因为无论如何都无法从外部访问这些功能。 最佳答案 如果您希望它们对那个编译单元真正私有(private),请将它们放在一个匿名命名空间中。如果您不这样做,那么其他人可以在别处声明这些函数并显式使用它们。举个例

c++ - 为什么 ADL 优先于 'std namespace' 中的函数,但等于用户定义的命名空间中的函数?

我有两个ADL片段用于演示目的。这两个片段都已由VC10、gcc和comeauC++编译器编译,结果对于所有三个都是相同的。针对用户定义命名空间的using指令的ADL:#includenamespaceN{structT{};voidswap(T,T){}}namespaceM{voidswap(N::T,N::T){}}intmain(){usingM::swap;N::To1,o2;swap(o1,o2);}编译结果:errorC2668:'M::swap':ambiguouscalltooverloadedfunctioncouldbe'voidM::swap(N::T,N::

c++ - 命名空间和 C++

我观察到,在C++中很少使用命名空间,而在.Net中却很常见。这有什么特别的原因吗。另外我想知道其他人是否看到过命名空间在C++中的普遍使用。编辑:实际上我指的是自定义应用程序,而不是标准库,如STL或任何其他东西。 最佳答案 在C++中,命名空间是在最初实现后的某个时间添加到语言中的,因此有很多应用程序代码没有使用它们。因此,同样由于它们的添加较晚,所有标准库都被放入一个namespace中。因此,使用简单的usingnamespacestd;如果您愿意,您几乎可以忽略namespace。另一方面,在C#中,从一开始就涉及name