从 C++17 开始,您似乎可以用大括号初始化派生结构。例如:
struct X {
int a;
};
struct Y : public X {
int b;
};
int main() {
Y y{{5}, 6};
return y.a;
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我的结构比这些复杂得多,并且想要使用指定的初始化,如下所示:
Y y{{.a = 5}, .b = 6};
Run Code Online (Sandbox Code Playgroud)
这是否可能以某种方式实现并且我犯了语法错误?为什么这不可能?
编译器抱怨:
either all initializer clauses should be designated or none of them should be
Run Code Online (Sandbox Code Playgroud)
我的解决方法是:
Y y{{.a = 5}};
y.b = 6;
Run Code Online (Sandbox Code Playgroud) 您可以使用连词或&&来指定正则表达式仅在其所有组成部分都匹配时才匹配&:
[4] > \'ready\' ~~ / r..dy & .ea.. /\n\xef\xbd\xa2ready\xef\xbd\xa3\n[5] > \'roody\' ~~ / r..dy & .ea.. /\nNil\n[6] > \'peaty\' ~~ / r..dy & .ea.. /\nNil\nRun Code Online (Sandbox Code Playgroud)\n当选择交替匹配的哪一方时,Raku 选择“更好”的一方。这里有两条规则很重要:具有较长声明性前缀的替代方案比具有较短声明性前缀的替代方案更好,并且较早声明的替代方案比其同级方案更好。
\n&文档表明使用代替的部分原因&&是被&认为是声明性的。如果我正确理解最长的令牌匹配,那就是我想要的。
然而,如果我使用连接作为交替的一个分支,就会发生一些令人惊讶的事情:如果它的替代项没有连接,则永远不会选择它。它似乎被认为比在我看来相同长度的火柴短。
\n这很烦人,因为我正在编写一个解析器,在其中很自然地说“如果文本与这两个规则都匹配,则它实际上被认为是联合规则的示例”。语法始终倾向于寻找构成规则而不是联合规则。
\n以下 REPL 示例都是模式的变体,其中我们使用联合替代方案和非联合替代方案进行交替,我们想知道为什么选择非联合替代方案:
\n\'froody\' ~~ / froody & froody | froody /\nRun Code Online (Sandbox Code Playgroud)\n(REPL 交互具有诊断代码和额外的括号,以确保我不会遇到优先级问题。)
\n在这里,交替的两侧在我看来应该被认为是相同的长度,所以我希望它选择左边的分支。它选择正确的分支。
\n[7] > \'froody\' ~~ / [ [ froody & froody ] { …Run Code Online (Sandbox Code Playgroud) 我正在使用 MFCCDC尝试创建输出,目前正在尝试渲染一些图像。
在我的示例中,我希望输出约为300x300像素,但原始图片是2360x1884. 当将此图像加载到 aCImage并使用CRectbeing绘制它时300x300,结果真的很疯狂......
这是原始图像:
绘制图像:
如何正确绘制原始图像较大的图像?
示例代码:
CImage image;
CDC* painter;
CString filepath = "puppy.jpg";
image.Load(filepath);
CRect boundries(x, y, x + 300, y + 300);
HDC hdc = *painter;
image.Draw(hdc, boundries);
Run Code Online (Sandbox Code Playgroud) 我需要使用uint64_tasunsigned long long int因为我需要适应比unsigned long它更大的数字?(两个操作系统都是 64 位),我该如何解决这个问题?这是实现二进制除法的代码: 这是我尝试打印以查看最终函数结果的函数:
void binary_div(s21_big_decimal *value_1, s21_big_decimal value_2, s21_big_decimal *result) {
init_s21_decimal(result);
s21_big_decimal Q;
s21_big_decimal R;
int scaleDiv = -1;
do {
init_s21_decimal(&R);
init_s21_decimal(&Q);
scaleDiv++;
int lastBit = (SIZE_BIG_DECIMAL - 1) * 32 - 1;
int currentBit = get_bit_big(*value_1, lastBit);
while (currentBit == 0 && lastBit >= 0) {
currentBit = get_bit_big(*value_1, lastBit);
if (currentBit == 0) lastBit--;
}
for (int i = lastBit; i >= 0; i--) { …Run Code Online (Sandbox Code Playgroud) 由于 TypeScript 是 Javascript 的超集,并且“Type”会在生成的 js 文件中被删除,所以我想使用“type”不会像这样工作,对吧?另外,除了两种不同的方法之外,还有什么更好的方法吗?
type VoidToVoidFunc = () => void;
type VoidToPromiseVoidFunc = () => Promise<void>;
async function add(func: VoidToVoidFunc | VoidToPromiseVoidFunc) {
if (typeof func == typeof VoidToVoidFunc)
func();
else
await func();
}
add(() => console.log(1));
Run Code Online (Sandbox Code Playgroud) javascript async-await typescript es6-promise ecmascript-2017
我正在使用 VSCode 通过 ssh 连接到服务器。
服务器有 Ubuntu 18.04,直到昨天晚上,它都工作正常,但是从今天早上开始,我收到以下错误(检查日志~/.vscode-server):
警告:缺少 GLIBC >= 2.28!来自 /lib/x86_64-linux-gnu/libc-2.27.so 错误:缺少所需的依赖项。请参阅我们的常见问题解答https://aka.ms/vscode-remote/faq/old-linux了解更多信息。
我查了一下,该库确实是一个旧版本,但令我感到奇怪的是,直到昨天它才起作用
VSCode 是否在后台静默更新了服务器上的服务器扩展还是什么?有人遇到这个问题吗?
考虑:
#include <type_traits>
template <typename T>
struct A {
~A() requires(std::is_void_v<T>);
//~A() requires(!std::is_void_v<T>) = default;
};
template struct A<int>;
Run Code Online (Sandbox Code Playgroud)
我认为一个类不可能没有析构函数,gcc 13.2 似乎同意我的观点,但 clang 17.0 和 msvc 19.38 不同意并抱怨:
[clang] error: no viable destructor found for class 'A<int>'
[msvc ] error C7653: 'A<int>': failed to select a destructor for the class
Run Code Online (Sandbox Code Playgroud)
(将注释行添加到代码中可以解决此问题并使所有编译器满意。)
哪些编译器是正确的?标准中的相关引用是什么?
我想仅使用 SSE2指令将 32 位无符号整数钳制为固定值 (0x10000)。
基本上,这个 C 代码:
if (c>0x10000) c=0x10000;
下面的代码有效,但我想知道是否可以简化它,考虑到它是一个特定的常量(0xFFFF+0x0001)
movdqa xmm3, xmm0 <-- xmm0 contains 4 dword unsigned values
movdqa xmm4, xmm5 <-- xmm5: four dword 0x10000 values
pxor xmm3, xmm5
pcmpgtd xmm4, xmm0
psrad xmm3, 31
pxor xmm4, xmm3
pand xmm0, xmm4
pandn xmm4, xmm5
por xmm0, xmm4
Run Code Online (Sandbox Code Playgroud)
的值c在 0x00000000-0xFFFFFFFF 范围内,但假设它在 0x00000000-0x00FFFFFF 或 0x00000000-0x00FF0000 范围内的代码可能是可接受的。
atomic_flag_test_and_set 是的!atomic_flag_clear 是的!atomic_flag_test_and_clear 没有atomic_flag_set 没有如果您想在某些上下文中对事件设置标志,并在其他上下文中检查并清除事件,C/C++ 不允许您在每个上下文中执行单个原子调用。
您必须反转标志,因此清除事件上的标志,在检查事件时检查并设置标志。
没什么大不了的,但在这种情况下似乎是倒退的,特别是考虑到标志的默认状态为 false,这在相反的意义上意味着默认情况下会断言事件。
我想,也可以使用原子boolwith来代替。atomic_exchange
此代码取自Jeff Friesen 所著的《Java 线程和并发实用程序》一书:
public class PC {
public static void main(String[] args) {
Shared s = new Shared();
new Producer(s).start();
new Consumer(s).start();
}
}
Run Code Online (Sandbox Code Playgroud)
class Shared {
private char c;
private volatile boolean writeable = true;
synchronized void setSharedChar(char c) {
while (!writeable)
try {
wait();
} catch (InterruptedException ie) {
}
this.c = c;
writeable = false;
notify();
}
synchronized char getSharedChar() {
while (writeable)
try {
wait();
} catch (InterruptedException ie) {
}
writeable = true; …Run Code Online (Sandbox Code Playgroud) c++ ×4
assembly ×1
async-await ×1
atomic ×1
c ×1
c++20 ×1
c11 ×1
cimage ×1
clamp ×1
concurrency ×1
es6-promise ×1
java ×1
javascript ×1
linux ×1
mfc ×1
raku ×1
regex ×1
simd ×1
sse2 ×1
ssh ×1
stdatomic ×1
stretchblt ×1
test-and-set ×1
typescript ×1
uint64 ×1
x86 ×1