相关疑难解决方法(0)

C++中"使用"声明的范围是什么?

我在C++中使用'using'声明将std :: string和std :: vector添加到本地命名空间(以节省输入不必要的'std ::').

using std::string;
using std::vector;

class Foo { /*...*/ };
Run Code Online (Sandbox Code Playgroud)

这个声明的范围是什么?如果我在标题中执行此操作,它会将这些"using"声明注入到包含标题的每个cpp文件中吗?

c++

93
推荐指数
5
解决办法
4万
查看次数

模板typedef - 你的工作是什么?

C++ 0x具有模板别名(有时称为模板typedef).看到这里.目前的C++规范没有.

你喜欢用什么来解决这个问题?容器对象还是宏?你觉得它值得吗?

c++ templates type-safety

71
推荐指数
2
解决办法
4万
查看次数

尝试通过using-declaration定义命名空间成员

考虑以下程序.根据c ++标准(参考所需标准的相关部分)是否格式良好:

namespace X { extern int i; }

namespace N { using X::i; }

int N::i = 1;

int main() {}
Run Code Online (Sandbox Code Playgroud)

我为不同的编译器得到了不同的结果.我正在试图弄清楚我应该为哪个编译器提交错误报告:

  • Clang:给出以下编译器错误:名称空间'N'中没有名为'i'的成员

  • GCC和Visual C++编译它没有错误.

为了比较,下面给出了所有三个编译器的编译器错误:

namespace X { void f(); }

namespace N { using X::f; }

void N::f() {};

int main() {}
Run Code Online (Sandbox Code Playgroud)

c++ namespaces definition using-declaration language-lawyer

16
推荐指数
1
解决办法
230
查看次数

如何在头文件中使用用户定义的文字?

我在以下位置定义了以下用户定义的文字MyLiteral.h:

namespace my_literals {
    constexpr uint64_t operator"" _nanoseconds(unsigned long long int value) {
        return value*1000;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在另一个标题中使用运算符SomeComponent.h:

using namespace my_literals;
namespace foo {
    constexpr uint64_t timeout = 10_nanoseconds;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不想污染范围using namespace my_literals,因为这会为*.cpp包含的所有文件提供文字定义SomeComponent.h.

我怎么能避免这个?在g ++中constexpr uint64_t timeout = my_literals::10_nanoseconds;给出数字常量之前的预期unqualified-id.

c++ user-defined-literals constexpr c++11 c++14

11
推荐指数
2
解决办法
899
查看次数

在另一个命名空间内使用`namespace`的范围

我知道我把using指令的范围限制在一个块或一个函数放在里面.然后它将仅适用于该范围.但是如果块是a,namespace它通过相同命名空间的所有块显然适用.那是对的吗?至少,以下示例表明:(http://ideone.com/K8dk7E)

namespace N1
{
    struct Foo{};
}

namespace N2
{
    using namespace N1;
    Foo f;
}

namespace N2
{
    Foo f2;
}

int main()
{
    N2::f2;
}
Run Code Online (Sandbox Code Playgroud)

我本来应该Foo f2给出一个错误,因为Foo应该是未知的.所以我真正的问题是,using对于同一名称空间的所有块,名称空间块中的语句是否有效?

当所有cpp文件被包含在一起编译时会导致问题,因为它会污染其他cpp文件,这些文件不应该包含其他命名空间(放置using指令的那个).因此,实际上它可能会导致不良冲突.

c++ scope using-directives

4
推荐指数
1
解决办法
1650
查看次数

在namspace中的头文件中使用"namespace"

我知道之前已经提出过一个非常相似的问题,"在c ++头文件中使用命名空间",但我的内部是命名空间.

namespace foo {
    using namespace std; // what does this do?

    class Bar { ... }
}
Run Code Online (Sandbox Code Playgroud)

这是否与其他问题完全相同,只是在所有地方使用声明?它只在该命名空间中执行吗?它只在标题中执行吗?

c++ namespaces using

2
推荐指数
1
解决办法
230
查看次数