问题标签 [using-directives]
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++ - 为什么在 C++11 中仍然需要“使用”指令来从基类中提出在派生类中重载的方法
下面的示例得到以下编译错误:
据我了解,这在 C++11 中发生了变化,因此您不需要放入 using 语句。这不正确吗?有没有其他方法可以解决这个问题?
示例(使用 gcc 4.7 编译,使用 --std=c++11):
c++ - 在派生类中使用指令将继承更改为公共
一个非常简单但又令人困惑的问题:
为什么 using 指令会更改继承!?这与 Comeau 一起编译。
我读过 using 指令(声明?)使变量公开,但为什么呢?我想要的只是一个不要总是this->x
在 B 内写的好方法......?
谢谢!
c++ - C++11`using`关键字:专门模板参数的模板别名
我今天在使用using
关键字 in 时遇到了问题C++11
。我决定现在使用另一种方法(在下面的示例中添加为注释)。您可以将其X
视为一个矩阵,Y
或者一个 mixin,其目的是访问 in 的转置矩阵X
类型Y
。代替typedef
ing X<B,A>
in X<A,B>
,我们采用另一种更强大的方法并定义一个Sibling
别名,该别名本身带有两个模板参数。
我尝试编译上面的代码,g++-4.7 -std=c++11 -c
它向我显示以下错误消息:
我完全不明白为什么会收到错误消息或如何修复它。有人可以向我解释问题是什么吗?
非常感谢!
jquery - Angularjs - 使用指令或小部件动态更改 dom?
我的目标是了解如何正确使用 angularJS。我希望能够将变量的选择与使用 angularJS 动态更改 DOM 结构联系起来。我认为我不太了解 angular 提供的文档,而且我在这里或其他地方都没有找到任何示例。任何帮助表示赞赏。
我的想法是我有这个用例,我首先从选择类型开始,然后从选择的类型开始,将创建适当的输入类型元素,然后使用 ng-model 记录(例如从 textareas 到复选框) ,一直由 angularjs 控制器控制以进行验证/限制。我已经习惯了在页面上拥有可克隆元素并使用 jQuery 销毁和创建新元素的想法,但我一直在阅读控制器不应该具有这种逻辑,而应该使用指令/小部件创建。我没有看到任何以这种方式操作的指令或小部件的示例,所以我什至不确定如何继续。我可以使用指令以这种方式操作 DOM,而不仅仅是一次,而是基于被监视的元素多次?
我想做的事的例子。
选择类型 1:
- 显示 2 个文本区域
选择类型 2:
- 显示数字输入
- 显示日期选择器
c++ - 是否所有 using 指令都以与 using namespace std 相同的方式查看?
我很容易养成了在标准标识符前面加上前缀std::
而不是在using namespace std;
. 但是,我已经开始接触 C#,并且我注意到添加任何必要的 using 指令是非常正常的,即,您会看到:
代替:
显然,正如我从关于这个主题的 C# 问题中发现的那样,这种用法来自于这样一个事实,即 C# 中的各个系统命名空间比 C++ 中的要小得多std
,因此消除了与名称冲突相关的问题,因为有很多可能性较小(如果库使用名称冲突进行更新,您可以将其替换为完全限定名称),并消除与出现大量 Intellisense 选项相关的问题,因为名称空间小到足以处理。
那么问题是,如果这些是在 C# 中使用 using 指令的长期理由,那么 C++ 是否也是如此?将其应用于较小的第三方命名空间以及您自己的较小命名空间通常可以接受吗?
现在我意识到这可能会引起一些争议,我想借此机会要求它不会变成争论。一个好的答案应该包括一个基础,即优点或缺点,以及如何使用一种方式而不是另一种方式真正产生有价值的差异。
我问这个的原因是为了澄清这个问题,并可能消除在 C++ 中使用指令必须是一件坏事的观念。当然,如果需要,可以使用命名空间别名来减少较长的命名空间名称,如果需要,仍然可以使用完全限定的名称,但有时使用指令可以极大地简化访问某些成员,例如用户定义的文字运算符,据我所知,没有 ADL 的形式,这意味着您要么必须使用 using 指令,要么通过函数语法调用运算符方法,这首先破坏了使用运算符的整个目的。
例如,我有一个命名空间(包括一个表示键盘键的结构,以及作为可读替代访问方式的文字后缀:
这里的问题是,除非您之前插入了using namespace Whatever;
or using Whatever::operator"" _key;
,否则代码将无法编译,这对用户来说是个坏消息。
使用指令在涉及或在标头中以这样的方式使用时会出现明显的问题std
,它们会为该标头的用户带来不需要的额外内容,但是当包含在比包含标题?由于不必每次都键入每个限定符而节省的击键确实加起来了,并且借助当今的 Intellisense 功能,找出不合格标识符属于哪个命名空间就像将鼠标悬停在它上面一样容易。
c++ - c++ using 指令的范围
从 c++11 标准的第 7.3.4.2 节:
using-directive指定指定命名空间中的名称可以在using-directive出现在using- directive 之后的范围内使用。在非限定名称查找 (3.4.1) 期间,名称看起来好像它们是在最近的封闭命名空间中声明的,其中包含使用指令和指定命名空间。[注:在此上下文中,“包含”是指“直接或间接包含”。——尾注]
第二句和第三句究竟是什么意思?请举例。
这是我试图理解的代码:
它打印“7 7”而不是“7 18”,如我所料。
抱歉打错了,程序实际上打印了“7 11”。
c++ - 为什么 ADL 优先于“std 命名空间”中的函数但等于用户定义命名空间中的函数?
我有两个用于演示目的的 ADL 片段。两个片段都已由 VC10、gcc 和 comeau C++ 编译器编译,并且所有三个的结果都是相同的。
<1>针对用户定义命名空间的 using 指令的 ADL:
编译结果:
这是预期的,因为 ADL 不优先于正常查找结果加上 ADL 不是二等公民,ADL 搜索结果与正常(非 ADL)未限定查找联合。这就是为什么我们有歧义。
<2>针对 std 命名空间的 using 指令的 ADL:
这个编译好了。
The result is compiler choose ADL result(it take precedent of std::swap), meaning N::swap()
at 'point 1' will be called. Only when in the absense of 'point 1'(say if I comment out that line), the compile will use the fall back std::swap
instead.
Note this way has been used in many places as a way to overwrite the std::swap
.
But my question is, why does ADL takes precedence over 'std namespace'(case2) but is considered equal to user-defined namespace function(case1)?
Is there a paragraph in C++ standard that says so ?
================================================================================= Edit after reading useful answers, might be helpful to others.
So I have tweaked my snippet 1 & now the ambiguity is gone and compile apparantly prefer Nontemplate function when doing overloading resolution !
I have also tweaked my snippet 2. Just to make the ambiguity appear just for fun !
gcc and comeau both say ambiguity as expected:
BTW VC10 stupid as usual let this one pass ok unless I remove the 'using std::swap'.
Just a bit more to write: C++ overloading can be tricky(30+ page in C++ standard), but at appendlix B of there is a very readable 10 page there...
Thanks for all the nice inputs, now it's clear.
c# - 使用 system.io 的 C# 在我的课堂上没有工作,但在 main 中工作
我正在研究一个我不记得以前遇到过的问题。我正在使用 VS2012 C#
当我添加使用时System.IO
;在我的主程序中一切正常,但是当我将它添加到我的类文件时,它不会让我使用所有的方法。
由于某种原因,它不会让我添加它。一旦我添加了句点,智能感知就会关闭并且没有显示任何选项。当我自己输入它时,它会显示为红色并说,
System.IO.File.Exists(string)
是一种方法,但用作类型
c++ - 模板特化的 using-like 语句
假设header中有如下定义
现在我希望标题的用户能够执行类似的操作
这显然是不可能的。
这样做的原因是我不希望我的 operator + 干扰标准 operator +,因此让用户可以指定应该为哪些类型 operator + 定义。有没有办法做到这一点?