问题标签 [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.
g++ - [[deprecated]] 与 using 不兼容但与 typedef 兼容
我发现(使用 g++ 6.3)我可以使用该[[deprecated]]
属性来弃用 typedef ( [[deprecated]] typedef longname shortname;
) 但不能使用using
声明 ( [[deprecated]] shortname = longname;
)。
所以我想知道,这是有意的(如果是,为什么?)?或者这是一个错误?
这作为 MWE:
给出取决于以下警告中注释的行(有意):
或以下错误(意外)
c++ - 命名空间的组成和选择
阅读The C++ Programming Language 第 4 版(第 14.4.4 节 - 组合和选择)后,我认为以下程序可以正确编译:
预期的输出应该是
baz: 变量
巴兹:1
当我尝试编译上面的代码时,我收到一条错误消息,指出对“var”的引用不明确。使用foo::var
消除了编译错误,但我想更好地理解这个问题。
我的代码有什么问题?
如何以命名空间 baz 包含的方式解决名称冲突foo::var
?
谢谢!
编辑
正如下面的答案所建议的,qux
在命名空间内移动定义baz
使其有效。因此,以下代码按预期编译
还有一件事对我来说并不完全清楚。我认为添加using namespace baz
将使所有内容在baz
当前范围内也可用,而无需使用baz::
. 换句话说,我原以为“一切都在命名空间 baz 中工作”,在添加using namespace baz
.
c++ - 函数 typedef 的使用等价物是什么?
如何使用新的1 using
关键字声明函数类型?
我知道如何使用它来声明函数指针类型。例如,下面的 typedef:
似乎等同于以下 using 声明:
如何对以下非指针 typedef 执行相同操作:
我的“删除 typedef 名称并将其放在后面using
”算法不起作用:
一个金螺栓链接。
1至少对于像我这样仍然将“新”定义为“在 C++11 中引入”的可怜人来说。
c++ - `int*[1]` 和 `int(*)[1]` 有什么区别?
为什么t2[0]
(/ t1
) 不可赋值?
int*[1]
和 和有什么区别int(*)[1]
?
更新:
c++ - 基构造函数的私有使用声明不是私有的
基本构造函数的using
声明是私有的,但仍然可以构造该类。为什么?
对于必须公开的operator[]
'声明,可访问性的工作方式不同。using
如果我希望构造函数是私有的怎么办?可以通过using
声明来完成吗?
c# - 内联使用如何使用它
在 C# 中,有时可以在代码中键入使用行宽的动词,例如
使用 (textwriter){ ..... }
我喜欢这种写作风格,我想知道我自己的 Api 需要什么。
c++ - 在 decltype 中使用命名空间
我有一个看起来或多或少像这样的函数:
函数体利用“
using
and use”习语和感谢
decltype
, 如果返回类型无效,将 SFINAE。
decltype
但是,一般来说它并不完美,因为我无法using std
告诉begin
.
也会不一致,例如何时decltype(c)
和begin
属于不同的命名空间。
有办法解决吗?
理想情况下,我想要类似的东西
我认为 lambda 原则上可以工作
但内部禁止使用 lambda decltype
。
在 GCC 中,有一个有趣的语言扩展(“表达式语句”)很有前途,但是它在函数体之外不起作用(与未评估的上下文中不允许使用 lambda 相同)。 否则这将是一个解决方案。
c++ - 使用声明冲突的重载
在本例中,g++ 8.1.0 编译成功,并test()
从B
.
clang++ 3.8.0 报告:error: call to member function 'test' is ambiguous
.
哪个是对的?如果是 g++,选择的规则是B::test
什么A::test
?
c++ - 多个复制构造函数继承中的令人惊讶的行为
从 C++11 开始,可以有两个复制构造函数,一个接受 type 参数,T&
一个接受 type 参数const T&
。
我有一种情况,当构造函数在派生类中继承时,(似乎)添加第二个复制构造函数会导致没有一个被调用。当两者都存在时,复制构造函数会被模板化构造函数覆盖。
这是一个MWE:
运行这段代码,我们看到输出
这是预期的。
但是,添加一个额外的构造函数struct A
如下:
不知何故导致另一个复制构造函数不被调用,所以输出变成
在我的用例中,我想将所有构造函数从基类继承到派生类中,包括复制构造函数和其他任何东西。但似乎这两个复制构造函数在它们都存在时不会被继承。这里发生了什么?
c++ - 模板模板参数:以下示例中应用了什么规则
假设以下示例
表达式 X<Y> x1
很明显是使用打印“2”的特化
第二个很奇怪。做分析X<Z>
被翻译成X< Y < T > >
. 我希望打印 "1" 。但是运行代码会打印“2”。哪条规则适用于第二条?