问题标签 [using-declaration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 带有枚举的“使用”声明
using声明似乎不适用于枚举类型:
不工作!
我们是否需要为每个枚举类型的枚举器添加一个using声明?如下所示:
c++ - Visual Studio 2008 中的 C++“使用”声明
我正在尝试使用 google protobuf,他们有以下示例:
当我尝试在 Visual Studio Express 2008 中实现此代码时遇到的错误是:
错误 C2873:“google::protobuf”:符号不能在 using 声明中使用
编辑:当我执行“使用命名空间 google::protobuf;”时 在函数内部它不再给我错误。我感到困惑的是,它不像 Google 的示例(以及 Stroustrup 在“C++ 编程语言”中的示例)似乎表明的那样工作。
c++ - 从依赖基类访问类型
有谁知道为什么 using-declarations 似乎不适用于从依赖基类导入类型名称?它们适用于成员变量和函数,但至少在 GCC 4.3 中,它们似乎被类型忽略了。
我有一个带有一组分配器样式 typedef 的基类,我想在多个继承级别中继承它们。到目前为止我发现的最佳解决方案是上面的第 3 版,但我很好奇为什么第 4 版似乎不起作用。GCC 接受 using 声明,但似乎忽略了它。
我检查了 C++ 标准,C++ Prog。朗。第三版。[Stroustrup] 和 C++ 模板 [Vandevoorde, Josuttis],但似乎都没有解决 using-declarations 是否可以应用于依赖的基类类型。
如果查看另一个示例会有所帮助,请在 GCC 邮件列表上提出相同的问题,但没有真正回答。提问者表示他在其他地方看到过“使用 typename”,但 GCC 似乎不支持它。我没有其他符合标准的编译器可用于测试它。
c++ - c++ 使用声明、范围和访问控制
通常,“使用”声明用于将基类的某些成员函数引入范围,否则这些成员函数将被隐藏。从这个角度来看,它只是一种使可访问信息更方便使用的机制。
但是:'using' 声明也可用于更改访问约束(不仅适用于函数,还适用于属性)。例如:
我认为派生类中的这种访问限制实际上是没有用的,因为您始终可以从指向基类的指针访问 g() 和 a。那么至少不应该有某种编译器警告吗?或者禁止派生类对访问的这种限制不是更好吗?using 声明不是添加访问约束的唯一可能性。它也可以通过覆盖基类的函数并将其放置在具有更多访问约束的部分中来完成。是否有一些合理的例子表明以这种方式限制访问确实是必要的?如果不是,我不明白为什么应该允许它。
还有一件事:至少对于 g++,相同的代码在没有“使用”这个词的情况下编译得很好。这意味着对于上面的示例:可以编写 C::a; 和 C::g; 而不是使用 C::a; 使用 C::g; 第一个只是后者的捷径还是有一些细微的差别?
//编辑:
所以从下面的讨论和答案中,我的结论是:
- 允许使用公共继承限制派生类中的访问约束
- 有一些有用的例子可以使用
它 - 它的使用可能会导致与模板结合使用的问题(例如,派生类不再是某些模板类/函数的有效参数,尽管它的基础是)
- 更简洁的语言设计不应允许此类使用
- 编译器至少可以发出某种警告
c++ - 使用声明(派生类)
是因为,B1::fb()
被视为B1::fb(B1*)
and B2::fb()
被视为B2::fb(B2*)
?也就是说,隐式参数是否有助于区分这些?
$13.3.1/4-
对于通过 using 声明引入派生类的非转换函数,为了定义隐式对象参数的类型,该函数被认为是派生类的成员。
c++ - 使用声明将名称移动到另一个命名空间?
鉴于:
以下两种变体之间有什么区别:
一个)
b)
编辑:很明显,(a)重复了永远不是一个好主意的代码。问题更多的是关于重载解析等。如果在其他名称空间中可能还有其他foo
s 或munch
es 怎么办?
c++ - 使用声明的命名空间(GCC/VS2010 中的错误)?
VS2010 - 编译良好
gcc (ideone) - 编译良好
Comeau - 给出错误“ComeauTest.c”,第 10 行:错误:“i”已使用 A::i 在当前范围内声明;”
$7.3.3/8 - “使用声明是一个声明,因此可以在允许(且仅在)允许多个声明的地方重复使用。”
那里的示例表明代码确实格式错误。
那么,这是 GCC 和 VS2010 中的错误吗?
编辑2:
删除倍数using directives
,因为它与手头的查询无关。
c++ - 使用声明是否应该隐藏继承的虚函数?
上面使用 gcc 的代码给出了
但在 icc 中给出
哪一个是正确的还是标准未定义?
编辑:这证明肯定存在错误,请考虑以下主要功能
所以同一个对象直接使用会产生不同的结果,而通过相同类型的指针使用会产生不同的结果!!!
c++ - 成员函数范围内的 C++ using 语句
如果我想使用来自模板派生类的模板基类的成员,我必须将它带入范围:
为什么我不能像其他 using 语句一样将此 using 语句放入本地范围?
c++ - 在命名空间声明之后声明 using 语句
我正在编写一个由几个“包”组成的实用程序库。每个包中的类都包含在不同的命名空间中。我知道如何通过在类声明的末尾自动声明 using 语句来简化这种情况(见下文),这将避免程序员在 cpp 文件中执行此操作。
我的理解是,如果用户包含标题 String.h 并且 String 在 Utility 中,那么程序员会想要使用 String。显然,如果有外部类链包括一堆弄脏命名空间的文件,这可能会很糟糕,所以我想如何将其改为#define。
这样,想要这种扩展功能的程序员就可以得到它。
这是一个好主意还是我忽略了什么?