问题标签 [ref-qualifier]

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.

0 投票
1 回答
3196 浏览

c++ - 使用 ref-qualifiers 解决重载问题

在使用 ref 限定函数重载时,我从GCC (4.8.1)Clang (2.9 and trunk)得到不同的结果。考虑以下代码:

Clang编译它并输出"const rvalue",而GCC认为这是一个模棱两可的调用,两个 const 限定函数都是最可行的候选者。如果我提供所有 4 个重载,那么两个编译器都会输出"non-const rvalue".

我想知道哪个编译器——如果有的话——正在做正确的事情,以及相关的标准部分是什么。

注意:这实际上很重要的原因是实际代码将两个 const 限定函数声明为constexpr. 当然,没有输出到std::cout并且static_cast被用来代替std::move,所以它们是有效的constexpr定义。并且由于在C++11 constexpr中仍然暗示const,因此无法提供示例代码中注释掉的重载,因为它会重新定义 const 限定的右值重载。

0 投票
1 回答
516 浏览

c++ - 引用限定的成员函数作为模板参数?

这在 clang 3.3 中编译得很好:

但在 gcc 4.8.1 中失败:

在不同的上下文中使用时,这会导致各种意外的编译器行为,例如崩溃或内部编译器错误。

我了解 ref 限定的成员函数在标准中被称为“*this 的右值引用”(N2439),并受 gcc 4.8.1 支持

这里的问题是将它们用作模板参数,其中 gcc 似乎没有区分 ref 限定和普通成员函数类型。

clang 对 std 库的实现似乎检测了这个特性是否支持

那么,这是使用 ref 限定函数的标准,还是语言扩展?

0 投票
1 回答
445 浏览

c++ - 使用 ref-qualifiers 成员函数重载的调用不明确

当我用G++gcc 4.8.1 和MinGW 4.8.2 带-std=gnu++1y标志)编译我的代码时,我发现了一个奇怪的行为。本着 SSCCE 的精神,我隔离了以下代码段:

它给出了一个错误:

但是在 and 的情况下#if 1#if 0or #if 0and#if 1它可以正常编译。另外,如果我用 's 替换所有auto' voids,那么所有编译也会成功。

是错误,还是只是我的误导?

0 投票
1 回答
714 浏览

c++ - 显式 ref 限定转换运算符模板在起作用

给定以下转换运算符

我希望以下转换都是有效的,但有些会产生编译错误(现场示例):

特别是,1 似乎与 3 相同,并且与 2 几乎相同(对于 7 到 9、8 类似),但行为不同。

任何解释或解决方法?

我的动机是又一个 'any',我最终不得不让所有的转换运算符explicit来避免像std::is_constructible,这样的类型特征的问题std::is_convertible,然后我遇到了新的问题。

编辑对不起,请忽略 3 和 9,我的错误(感谢 Kerrek SB)。然而 7 和 8 仍然是问题。另外,explicit毕竟似乎无关紧要,再次抱歉。

编辑 2刚刚注意到

如果转换运算符不是 ,则有效explicit。所以这就是explicit出现的地方:最初我的示例使用复制初始化,当我切换到时,explicit我不得不使用直接初始化。然后出现了这个问题(案例 7 和 8)。

0 投票
6 回答
347 浏览

c++ - 如何提高C++14中“str1 + str2 + str3 + ...”的效率?

默认情况下,return s1 + s2 + s3 + s4 + s5;可能等价于以下代码:

有没有一种优雅的方法可以将分配时间减少到 1?我的意思是保持return s1 + s2 + s3 + s4 + s5;不变,但效率会自动提高。如果可能的话,也可以避免程序员误用std::string::operator +.

ref-qualifier成员函数有帮助吗?

0 投票
1 回答
261 浏览

android - 我可以参考整个资源文件夹吗?

我想用可绘制资源支持许多不同的屏幕类型。但是我可以在更多屏幕上使用一些相同大小的drawable。

例如:-xxhdpi-normal 和 -mdpi-xlarge 可以使用相同大小的可绘制图像我不想创建 2 个文件夹(drawables-xxhdpi-normal 和 drawables-mdpi-xlarge),因为这样 .apk 将变大。

我知道,如果我只是将每个可绘制资源简单地放入具有不同名称的可绘制文件夹中。然后我可以为每个屏幕制作布局。这需要做很多工作,但会生成更小的 .apk 我知道如果我使用 refs.xml 而不是不同的 layout.xml-s(关于 refs.xml:http://blog.vogella ),维护我的代码会更容易.com/2013/08/13/using-xml-layout-references-in-android/ )

但是在这种情况下,我仍然需要在资源命名方面做很多工作,而且我不能使用像(剪切和切片我 - 为不同 dpi-s 导出可绘制对象的 Photoshop 插件)之类的工具

有没有办法,我只能对系统说: 如果设备是-mdpi-xlarge 使用drawables-xxdpi 文件夹进行布局?

0 投票
0 回答
101 浏览

android - 我可以轻松参考以获取更多资源吗?

我正在开发一个游戏。我想在屏幕上显示一张图片。它应该填满屏幕 90% 的宽度(大约 90%)。我不希望系统调整我的图像大小(我不喜欢它产生的质量)我想在不重新缩放/调整大小的情况下放置图片。

这就是我希望它在不同屏幕上的显示方式: 在此处输入图像描述

在这种情况下,我有 2 种尺寸的资源图像(宽度:第一个为 720 像素,第二个和第三个为 1440 像素)。(第三个是平板电脑)我知道如果我将它们放入不同的drawables文件夹中,那会很好。
第一个:drawables-mdpi
第二个:drawables-xxdpi
第三个:drawable-mdpi-xlarge

唯一的问题:我的 apk 会比它可能的大(第二张图片是重复的,因为它的副本在不同的文件夹中)

我的问题是: 如何在不重复且易于维护的情况下完成这项工作?

我的 google-ing 的结果: 不要使用不同的可绘制文件夹,我应该像这样使用它:
/drawables/

  • myPicture_720.png
  • myPicture_1440.png

然后我可以为每种屏幕类型制作不同的layout-s,并且apk不会大很多。这样做的问题是:维护工作量太大

更简单的方法:
使用 refs.xml
http://blog.vogella.com/2013/08/13/using-xml-layout-references-in-android/
/values-mdpi-xlarge/refs.xml

(这是第三屏)

这样我只能有一个布局,并且将使用大小合适的可绘制资源。

唯一的问题是:
由于名称,我仍然需要维护很多。
我使用 Photoshop 插件(Cut 'n' Slice Me),它以 4 种不同大小在 4 个不同文件夹中为 4 种基本密度导出可绘制对象。

我知道这不是常规方式,我应该如何使用该系统,但是如果您知道更简单的方法,请尝试回答我的问题。

我认为它应该像这样工作:
我可以制作 2 个不同的文件夹,并且可以为整个文件夹做一个参考,以便从那个文件夹中获取可绘制的资源。(在一个文件夹中,名称将相同(myPicture.png)

注意:
在我的示例中,提到了 720px 和 1440px。在实际开发中,它不会是双倍的,因此调整大小会使它看起来更糟。

TLDR:
如果我的 drawables-xxdpi 和 drawables-mdpi-xlarge 相同,我怎样才能让系统在不复制文件夹的情况下使用好的资源?

0 投票
2 回答
1423 浏览

c++ - 函数的引用限定符有什么实际用例吗?

最近我了解到function's reference qualifiers,例如

在我可能需要此功能的地方,此语言功能是否有任何实际用例?

0 投票
1 回答
79 浏览

c++ - l-value ref-qualified member function 和 unqualified member function 之间的区别?

左值引用限定成员函数和非限定成员函数之间有区别吗?如果是这样,它是什么?

即,这两种声明方式func()不同吗?

func()我的意思不是“它们是否足够不同以允许重载解析”,因为显然当两个版本都存在时,上述类不会编译。&我的意思是,编译器在包含与不包含时如何以及为什么会表现不同?

至少有一个区别,即 ref 限定函数(左值或 r 值类型)不能用非 ref 限定函数重载。从目前的标准草案

同名同参数类型列表的成员函数声明,同名同参数类型列表的成员函数模板声明,同模板形参列表中的任何一个都不能重载,但是不是全部,有一个参考限定符。

...但如果这是唯一的区别,为什么要限制?即,为什么不能foo()&&被视为 (unqualified) 的有效覆盖foo()

0 投票
1 回答
128 浏览

c++ - 通过 ref-qualifier 重载操作符以防止临时操作符是否合理?

我突然想到operator+& co 可以对右值进行操作this;即给定一个类C,可以这样做:

这将通过简单地就地修改临时值来防止复制。

这会按我的预期执行吗?这是一个合理的优化还是编译器会创建同样快的代码?