小编Lac*_*ack的帖子

C++20 比较:关于不明确的反向运算符的警告

考虑这个有效的 C++17 示例:

struct A {
   bool operator==(const A&);
};


int main() {
   return A{} == A{};
}
Run Code Online (Sandbox Code Playgroud)

使用 -std=c++20 在 clang 中编译时,它给出

struct A {
   bool operator==(const A&);
};


int main() {
   return A{} == A{};
}
Run Code Online (Sandbox Code Playgroud)

这个警告是否意味着 C++20 不允许使用典型的比较运算符来比较两个相同类型的对象?什么是正确的选择?这种情况在未来的选秀中会发生变化吗?

c++ c++20

22
推荐指数
2
解决办法
2723
查看次数

每个监视器DPI-Aware:使用NVIDIA Optimus的黑色窗口故障

我想制作一个Per-Monitor DPI-Aware Direct2D应用程序.我已按照Kenny Kerr的MSDN文章中的解释,扩展了Microsoft的"First Direct2D Program"示例.当两台显示器都使用一块显卡时,这种方法很有效,但在使用我的笔记本电脑的NVIDIA Optimus设置时会出现故障.WM_DPICHANGED

我可以通过以下步骤运行Per-Monitor Aware WPF示例来重现相同的故障:

  • 每台显示器上的DPI比例因子不同.
  • 支持Optimus(集成显卡上的笔记本电脑显示,Quadro显卡上的外接显示器)
  • 应用程序在主显示屏上启动 - 右侧的外部显示器.
  • 将其拖到左侧,它可以正确处理DPI更改.
  • 将其拖回右侧.当它处理DPI更改时,右侧监视器上的窗口部分变为黑色.左侧部分仍然正确绘制.

(见这个bug的视频)

我只是在上面的示例应用程序中看到了这个错误,当我尝试将Kerr的WM_DPICHANGED处理程序添加到一个更简单的示例时.可疑的是,我已经看到其他应用程序(Chrome,Visual Studio本身)显示类似的黑色窗口,但只是暂时的,如果我在显示器之间拖动并且非常快速地最大化它们.

那么 - 是否有人熟悉这个故障?是我的显示驱动程序中的一些错误?或者是否有其他应用程序要做的事情来纠正它,示例代码没有?

c++ winapi multiple-monitors direct2d optimus

6
推荐指数
1
解决办法
397
查看次数

将包装器结构数组转换为 SIMD 向量

假设我有一个包装结构,用作幻像类型。

struct Wrapper {
  float value;
}
Run Code Online (Sandbox Code Playgroud)

将此结构体的数组直接加载到 SIMD 内在类型(例如 )中是否合法__m256?例如,

alignas(32) Wrapper arr[8] = {};
static_assert(sizeof(Wrapper) == sizeof(float));
__m256 x = _mm256_load_ps(reinterpret_cast<float*>(arr));


// or (I think this is equivalent):
__m256 y = *(__m256 *)arr;
Run Code Online (Sandbox Code Playgroud)

讨论

对我来说,指针算术规则似乎不适用:如果我可以断言类型是兼容的(例如没有填充),那么由于向量类型的特殊属性,直接转换是有效的。但我还没有看到这种特殊的用法,并且担心编译器可能会调用指针算术或加载操作的其他规则并触发 UB。鉴于这是一个非标准扩展,我可以确定吗?

c++ simd intrinsics undefined-behavior language-lawyer

5
推荐指数
1
解决办法
296
查看次数

Actionscript 3:使用字符串中的名称播放库中的声音

我正在尝试编写一些 actionscript 3 代码来播放库中的短声音,使用动态创建的字符串来加载它。

在 AS2 中,我可以这样做:

mySound = new Sound();
mySound.attachSound("any concatenated string" + foo);
Run Code Online (Sandbox Code Playgroud)

然而,在 AS3 中,标识符是一个类,其名称似乎必须是已知的。有没有一种简单的方法可以使用标识符作为 ActionScript 3 中的字符串来“附加”声音?

flash audio actionscript-3

3
推荐指数
1
解决办法
1万
查看次数