我似乎找到了Clang和GCC不同意的东西.这是代码:
int main() {
if constexpr (2) {}
}
Run Code Online (Sandbox Code Playgroud)
这成功编译了GCC 7.4.0,但它与Clang 7.0.0失败并出现此错误消息:
test.cpp:3:17: error: constexpr if condition evaluates to 2, which cannot be narrowed to type 'bool'
[-Wc++11-narrowing]
if constexpr (2) {}
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
cppreference似乎没有提到"缩小",所以这看起来像一个Clang bug,但我不完全确定.如果这是任何一个编译器的错误,是否已报告?
std::span已被选入C ++ 20。我假设与一起std::span将有一个方便的别名,定义如下:
template <class T, size_t Extent = dynamic_extent>
using cspan = span<const T, Extent>;
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是一个非常方便的别名。我可能cspan会比使用更多span!根据cppreference,cspan不存在。有一个提到cspan在本文中这似乎暗示,是在一些点的标准。我找不到其他提及。
那怎么了cspan?它被删除了吗?它曾经存在过吗?
我正在用Xcode创建一个C++ Mac应用程序.我以前做过这个没有任何问题,但几个星期前我开始了一个新项目,这个问题.
当我启动应用程序时,此消息在调用后出现在控制台中 SDL_GL_CreateContext
bootstrap_check_in(): (os/kern) unknown error code (44c)
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个,我不知道这意味着什么.该应用程序仍然启动.
osascript不再有效.调用此命令时
osascript -e 'try' -e 'POSIX path of ( choose file name with prompt "Save screenshot" default name "Screenshot.png" )' -e 'on error number -128' -e 'end try'
Run Code Online (Sandbox Code Playgroud)
此消息显示在控制台中:
2017-11-25 10:50:19.837159+1030 osascript[7910:487965] +[NSXPCSharedListener endpointForReply:withListenerName:]: an error occurred while attempting to obtain endpoint for listener 'com.apple.view-bridge': Connection interrupted
2017-11-25 10:50:19.838056+1030 osascript[7910:487963] *** Assertion failure in +[NSXPCSharedListener connectionForListenerNamed:fromServiceNamed:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/ViewBridge/ViewBridge-341.1/NSXPCSharedListener.m:421
2017-11-25 10:50:19.838724+1030 osascript[7910:487963] *** Assertion failure in -[NSVBSavePanel viewWillInvalidate:], …Run Code Online (Sandbox Code Playgroud) 我真的很接近使粗椭圆算法起作用,但是我有点麻烦。我从这里开始采用中点粗圆算法,从这里开始采用中点椭圆算法,并且我试图将它们组合在一起以获得中点粗椭圆算法。我这样做是因为Googling的“中点粗椭圆算法”没有显示我在寻找什么。我的尝试输出类似于一个粗圆圈(图像在帖子底部)。
这是图像代码(只是一个占位符):
struct Point {
int x, y;
};
struct Image {};
using Color = int;
void setPixel(Image &, Color, Point) {
// ...
}
void horiLine(Image &image, Color color, Point first, int last) {
while (first.x <= last) {
setPixel(image, color, first);
first.x++;
}
}
void vertLine(Image &image, Color color, Point first, int last) {
while (first.y <= last) {
setPixel(image, color, first);
first.y++;
}
}
Run Code Online (Sandbox Code Playgroud)
这是中点粗圆算法:
void midpointCircleThick(
Image &image,
Color color,
Point center, …Run Code Online (Sandbox Code Playgroud) 注:MCVE在最后
我更新了我的 mac 应用程序的 AppIcon 和 Document 图标。图标已更改,但它们也显示为灰度。源文件 (PNG) 是彩色的。图标在 Xcode 中显示为彩色,但在上下文中(停靠栏中的 AppIcon 和 Finder 中的文档图标)是灰度的。我已经尝试过一些显而易见的事情,比如清理构建文件夹、重新启动 Xcode 和重新启动 Finder,但我不知道还能尝试什么。
这是图标在上下文中的显示方式:
这是图标在 Xcode 中的显示方式:
我所做的只是更新了一些 PNG!一切仍然正常运行。该应用程序仍会启动,双击文档可打开该应用程序。问题是图标是灰色的。
在更改图标的 git commit 中,唯一更改的是一些 PNG 和一些文档文件(自述文件中的链接、屏幕截图和其他一些内容)。如果我在更改图标之前检查提交,则一切正常。如果我签出更改图标的提交,它们是灰色的。
我一直在查看 PNG 本身以试图解决这个问题。我正在pngcheck用来检查文件。
旧(工作)16x16 图标:
chunk IHDR at offset 0x0000c, length 13
16 x 16 image, 32-bit RGB+alpha, non-interlaced
chunk bKGD at offset 0x00025, length 6
red = 0x00ff, green = 0x00ff, blue = 0x00ff
chunk IDAT at offset 0x00037, length 142
zlib: deflated, 2K window, maximum …Run Code Online (Sandbox Code Playgroud) 有没有办法将二维十六进制代码数组转换为 png 图像?
数组看起来像这样(只是大得多)
[
[
'#FF0000',
'#00FF00'
],
[
'#0000FF',
'#000000'
]
]
Run Code Online (Sandbox Code Playgroud)
从这个数组,图像应该是这样的

如果该方法不适用于这样的数组,那么它将使用什么类型的数组?
我正在尝试创建一个带有两个对象参数包的函数。有两个模板化基类,我想将派生类的实例传递给此函数。考虑这个例子。
template <int N>
struct First {};
template <int N>
struct Second {};
// there are a few of these
struct FirstImpl : First<5> {};
struct SecondImpl : Second<7> {};
template <int... firstInts, int... secondInts>
void function(float f, First<firstInts> &... first, Second<secondInts> &... second) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想做的就是function像这样打电话
FirstImpl firstImpl;
OtherFirstImpl otherFirstImpl;
SecondImpl secondImpl;
OtherSecondImpl otherSecondImpl;
function(9.5f, firstImpl, otherFirstImpl, secondImpl, otherSecondImpl);
Run Code Online (Sandbox Code Playgroud)
但这个例子无法编译。编译器似乎试图将所有内容打包到第二个参数包中,但由于FirstImpl无法隐式转换而失败Second<N>。
我该如何解决这个问题?
我正在尝试创建一个只应该暂时存在的类。我正在使用它来创建一个类似于函数的部分应用的界面。这是我正在尝试做的一个愚蠢的例子。
struct Adder {
explicit Adder(const int &leftOp)
: leftOp(leftOp) {}
int add(const int rightOp) const {
return leftOp + rightOp;
}
//note that addTwice calls add
int addTwice(const int rightOp) const {
return add(rightOp) + add(rightOp);
}
private:
const int &leftOp;
};
struct Calculator {
explicit Calculator(const int leftOp)
: leftOp(leftOp) {}
Adder add() const {
return Adder(leftOp);
}
void setLeftOp(const int newLeftOp) {
leftOp = newLeftOp;
}
private:
int leftOp;
};
Run Code Online (Sandbox Code Playgroud)
计算器就是这样使用的。
Calculator myCalculator(4);
const int myNum = …Run Code Online (Sandbox Code Playgroud) Clang 8.0.0 和 GCC 9.1.0 似乎不同意这是否是有效代码。
struct Foo {
Foo([[maybe_unused]] int x) {}
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
Clang 不产生警告(即使使用-Wall -Wextra -Wpedantic),但 GCC 产生此错误:
test.cpp:2:7: error: expected unqualified-id before '[' token
2 | Foo([[maybe_unused]] int x) {}
| ^
test.cpp:2:7: error: expected ')' before '[' token
2 | Foo([[maybe_unused]] int x) {}
| ~^
| )
Run Code Online (Sandbox Code Playgroud)
那么哪个编译器有错误?
我正在开发一个图像绘制程序,但我对色彩空间感到非常困惑。我对伽玛的了解越多,我知道的就越少(这没有多大帮助)。
在内部,绘图程序会将图像存储为 8 位 sRGB,然后转换为 16 位线性进行合成和过滤操作。也许我应该存储 16 位线性,然后在导出时转换为 8 位 sRGB?我很想在这方面提供一些建议。目前,我不确定 Qt 将 RGB 像素解释为什么颜色空间!
据我了解,sRGB 接近大多数显示器使用的色彩空间,因此从 sRGB 转换到显示器色彩空间不会对图像数据产生太大影响。查看 sRGB 数据,就好像它在正确的色彩空间中一样可能会非常接近。
绘图程序显示 sRGB 图像。我想将这些 sRGB 图像保存到 PNG 文件中。当我在创建图像的同一台计算机上打开这个 PNG 文件(在 Mac 上使用预览)时,它看起来应该与艺术家在绘图程序中看到的完全一样,并且具有相同的颜色值(用数字颜色检查仪表)。不同的显示器和不同的操作系统使用不同的色彩空间。这些色彩空间可能不“适合”用于创建图像的系统的色彩空间。当我在不同的显示器甚至不同的计算机上打开 PNG 时,图像应该看起来尽可能与原始图像相似,但可能具有不同的颜色值。
绘图程序似乎正确显示图像(我认为)。问题是PNG。我正在使用 Qt 并使用QImage::save. 如果我需要更多控制,我愿意使用 libPNG。
为了测试,我正在绘制一个 5x5 的图像,其中0 63 127 191 255包含红色和绿色的颜色值。
当我使用 Digital Color Meter 对绘图程序渲染的图像进行采样时,像素值没有变化。3,3使用 DCM 采样的像素191 191 0应该是这样。每个像素之间都有明显的对比。
当我截取屏幕截图时,屏幕截图文件中的像素值不同。3,3在预览中查看时使用 DCM 采样的像素为192 191 0. 3,3存储在文件中的像素是 …