AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-1593077

einpoklum's questions

Martin Hope
einpoklum
Asked: 2025-04-10 00:12:08 +0800 CST

我可以让 clang-tidy 警告关于使用间接包含的标准库构造

  • 5

考虑以下程序:

#include <array>

int main() {
    throw std::logic_error("hi");
}

在某些 C++ 编译器(或者更确切地说,标准库)中,这可以编译。例如,libstdc++ 8,其中<array>包含<stdexcept>。但在其他标准库实现中,例如 libstdc++ 11,则无法编译。

我能让 clang-tidy 警告我这种情况吗?至少相对于标准库来说?

如果没有 - 是否有其他工具(可能不是基于 clang)可以帮助我检测这个问题?

c++
  • 1 个回答
  • 54 Views
Martin Hope
einpoklum
Asked: 2025-04-07 18:54:26 +0800 CST

在 CSS 中,如何使用属性有条件地设置 :root 伪元素的样式?

  • 5

我有一些 JS 代码需要对整个渲染好的 HTML 文档进行样式设置。我目前使用的是以下 CSS:

[myattr="true"]  { direction: rtl; }
[myattr="false"]  { direction: ltr; }

加上在文档元素上设置一个属性:

doc.documentElement.setAttribute('myattr', true);

但是——出于一些原因(这些原因应该不相关),我希望CSS能够设置:root伪元素的样式,而不是<html>元素本身。我的问题是:如何:root根据属性值进行选择?我无法设置属性本身:root,因为它不是DOM的一部分。

css
  • 1 个回答
  • 37 Views
Martin Hope
einpoklum
Asked: 2025-03-22 19:37:28 +0800 CST

为什么我的 hello-world rust 可执行文件依赖于 libgcc_s?

  • 5

我正在用 Rust 构建以下程序:

fn main() {
    println!("Hello, world!\n");
}

在 Devuan Excalibur 系统上(类似 Debian Trixie,但没有 systemd;rustc 版本 1.84)。构建后(使用cargo build --release),我有:

$ ldd target/release/hello
    linux-vdso.so.1 (0x00007fff356f5000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0b073c5000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0b071cf000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f0b0749c000)

这有点奇怪,就像一个 hello-world C 程序一样:

#include <stdio.h>
int main() {
    printf("Hello world\n");
    return 0;
}

和 GCC 14.2(gcc -O3),我得到:

$ ldd hello
    linux-vdso.so.1 (0x00007fff1d573000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8f1649f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8f166e5000)

也就是说,没有libgcc_s依赖项。Rust 编译器在需要额外依赖项的可执行文件中放入了什么?为什么?

注意:我首先对可执行文件的大小差异感到疑惑;但这个问题已经解决了。

rust
  • 2 个回答
  • 72 Views
Martin Hope
einpoklum
Asked: 2025-02-20 00:48:22 +0800 CST

定义一个实际上不提供 now() 函数的 std::chrono Clock 是否“合法”?

  • 13

我正在编写一个 C++ 库,它处理包含一些时间值的数据 - 这些值不是源自运行该库的系统。我想将这些值放入 中std::chrono::time_point(将向库的用户公开)。

现在,要做到这一点,我需要指定一个Clock类型。好的,那应该不是问题,对吧?我可以满足所有的要求,不是吗?...嗯,不,不是真的,我有一个障碍:now()功能。我无法now()为生成我正在查看的时间点值的系统提供值!我无法访问它,也许它不再存在;它可能已经停止,或被重置,或完全不复存在。

这是否意味着我不应该使用std::chrono类型?或者我应该创建一个时钟类型,其now()函数返回一个固定的虚拟值?或者人为增加值?

c++
  • 2 个回答
  • 207 Views
Martin Hope
einpoklum
Asked: 2025-02-10 20:37:12 +0800 CST

OpenCL 平台在执行过程中可以改变吗?

  • 5

在执行某个进程时,后续调用的结果是否会clGetPlatformIds()改变?例如,平台是否会消失、出现、改变顺序或改变句柄(“id”)?

我问的当然是 OpenCL 标准保证什么或要求什么。

opencl
  • 1 个回答
  • 26 Views
Martin Hope
einpoklum
Asked: 2025-01-18 22:39:10 +0800 CST

启动后设置内核参数会发生什么?我必须重置它们吗?

  • 7

在 CUDA 中,启动内核意味着指定其参数,通过指针数组进行编组:

CUresult cuLaunchKernel ( 
    CUfunction f, 
    /* launch config stuff */, 
    void** kernelParams,
    /* snip */ );

CUresult cuLaunchKernelEx ( 
    const CUlaunchConfig* config, 
    CUfunction f, 
    void** kernelParams, 
    /* snip */ ) ;

启动后 - 您仍然拥有指向参数值的指针数组,您可以用它做任何您想做的事情:再次启动,修改然后启动等等。

然而,在 OpenCL 中,内核参数是逐个设置的,并且不透明:

cl_int clSetKernelArg(
    cl_kernel kernel,
    cl_uint arg_index,
    size_t arg_size,
    const void* arg_value);

因此,您需要设置、设置、设置几次,然后启动内核(使用clEnqueueNDRangeKernel())。有趣的是,它cl_kernel不仅仅代表一段设备端可执行代码,而是额外的状态,包括您设置的参数。

我的问题是:启动内核后,我可以对此状态和我设置的参数做出哪些假设?我可以假设一切都和启动前一样吗?我可以只更改一些参数,保留其余参数,以便再次启动同一个内核吗?或者 - 它们是否以某种方式失效/丢失,必须重新完全设置?...也许这取决于实现?

opencl
  • 1 个回答
  • 27 Views
Martin Hope
einpoklum
Asked: 2025-01-03 18:27:00 +0800 CST

在 C 语言中,当且仅当 int64_t 可用时,PRId64 才被定义,这一说法正确吗?

  • 8

我想在 C 中可移植地使用 64 位有符号类型。但是 - 我知道int64_t不能保证定义。我可以在构建系统生成中使用一些预处理器魔法(例如 CMake 的check_type_size())来获取预处理器定义,告诉我是否可以使用它。但是 - 我们确实有PRId64格式说明符,我们将使用它来将int64_t值传递给printf()类似函数。因此,我可以使用的定义PRId64作为确定是否int64_t可用的代理吗?

c
  • 2 个回答
  • 83 Views
Martin Hope
einpoklum
Asked: 2024-09-22 03:02:11 +0800 CST

我的项目使用 CMake。我需要关心 cmake-file-api 吗?

  • 6

CMake 现在已经有一种称为“CMake 文件 API”的东西:

CMake 提供了一个基于文件的 API,客户端可以使用该 API 获取有关 CMake 生成的构建系统的语义信息。客户端可以通过将查询文件写入构建树中的特定位置来使用该 API,以请求零个或多个对象类型。当 CMake 在该构建树中生成构建系统时,它将读取查询文件并编写回复文件供客户端读取。

我不明白这个 API 应该何时使用,由谁使用。因此,我不明白,作为使用 CMake 的项目维护者,我是否需要担心这个 API 并“迎合”使用它来满足请求。我需要吗?

注意:如果答案取决于我维护哪种 CMake 项目 - 请选择几个示例(因为我在多种项目中使用 CMake)。

cmake
  • 1 个回答
  • 14 Views
Martin Hope
einpoklum
Asked: 2024-09-05 17:27:02 +0800 CST

仅限制函数的“输出”(指针)参数就足够了吗?

  • 8

假设我有一个函数,它接受一些指针参数 - 一些非常量,可以通过它们写入,一些常量,只能通过它们读取。示例:

void f(int * a, int const *b);

还假设该函数不会以其他方式写入内存(即不使用全局变量,固定地址,将 const 指针重铸为非常量以及诸如此类的技巧)。

现在,是否足以(按照 C 语言标准)实现restrict内所有读取的好处f(),而仅restrict输出参数?即在示例中,限制a但不限制b?

一个简单的测试(GodBolt)表明这种限制应该足够了。此来源:

int f(int * restrict a, int const * b) {
    a[0] += b[0];
    return a[0] + b[0];
}

int all_restricted(int * restrict a, int const * restrict b) {
    a[0] += b[0];
    return a[0] + b[0];
}

int unrestricted(int * a, int const * b) {
    a[0] += b[0];
    return a[0] + b[0];
}

为 x86_64 生成相同的目标代码:

f:
        mov     eax, DWORD PTR [rsi]
        mov     edx, DWORD PTR [rdi]
        add     edx, eax
        mov     DWORD PTR [rdi], edx
        add     eax, edx
        ret
all_restricted:
        mov     eax, DWORD PTR [rsi]
        mov     edx, DWORD PTR [rdi]
        add     edx, eax
        mov     DWORD PTR [rdi], edx
        add     eax, edx
        ret
unrestricted:
        mov     eax, DWORD PTR [rsi]
        add     eax, DWORD PTR [rdi]
        mov     DWORD PTR [rdi], eax
        add     eax, DWORD PTR [rsi]
        ret

但这并非普遍的保证。

c
  • 3 个回答
  • 101 Views
Martin Hope
einpoklum
Asked: 2024-09-04 22:48:25 +0800 CST

如何限制 C 中的数组参数(不将它们变为指针)?[重复]

  • 6
此问题这里已有答案:
限制数组大小的目的是什么? (2 个答案)
17 小时前关闭。

动机

数组参数可以互为别名,编译器必须小心考虑这种可能性。例如:GodBolt

int foo(int a[10], int b[10]) {
    a[0] += b[0];
    return a[0] + b[0];
}

int bar(int *a, int *b) {
    a[0] += b[0];
    return a[0] + b[0];
}

int baz(int * __restrict a, int * __restrict b) {
    a[0] += b[0];
    return a[0] + b[0];
}

的编译代码foo()必须与 的类似bar(),而不是 的类似baz()。

问题

我想在我的函数中使用数组参数 - 甚至可能是多维数组(不是指针数组;那种用一对方括号声明并衰减为指向第一个元素的简单一级指针的数组)。我还想让编译器假定没有别名,即我想将我的数组参数标记为restrict'ed。

我怎样才能用 C 语言做到这一点?如果我不能做到这一点 - 那是什么原因?

arrays
  • 1 个回答
  • 48 Views
Martin Hope
einpoklum
Asked: 2024-07-27 00:45:49 +0800 CST

明确删除的构造函数-这重要吗?

  • 8

当将构造函数标记为已删除时,即

class MyClass {

   // ... 

   MyClass(int x) = delete;

   // ... 

};

将已删除的构造函数标记为 有什么影响吗explicit?即

   explicit MyClass(int x) = delete;

?

c++
  • 1 个回答
  • 81 Views
Martin Hope
einpoklum
Asked: 2024-03-01 23:51:04 +0800 CST

我可以让 MSVC 对“C4127:条件表达式为常量”不那么严格吗

  • 7

我正在使用 MSVC 16 2019,并打开了许多警告,包括 C4127:条件表达式是常量。但是,我的代码如下所示:

template <bool B>
void foo(int x) {
    if (B && x == 0) { do_stuff(); }
    do_other_stuff();
}

...当 B 为 false 时会触发警告。

我想一般保留此错误,但我不希望它在条件表达式的常量性仅由于模板实例化时无缘无故地发出警告。

注意:这个问题是相关的,但是 - 代码不会(显着)改变,所以这不是我要问的。C++17 中也没有。

c++
  • 2 个回答
  • 81 Views
Martin Hope
einpoklum
Asked: 2023-12-02 00:55:27 +0800 CST

为什么我不能将lazy_split_view 与istream 视图而不是string_view 一起使用?

  • 8

考虑以下代码片段(改编自 cppreference.com):

constexpr std::string_view text{"Hello-+-C++-+-23-+-!"};
constexpr std::string_view delim{"-+-"};
std::ranges::for_each(text | std::views::lazy_split(delim), act_on_substring);

我想对流做同样的事情 - 比如说std::cin- 而不是text. 我试过了:

auto isv = std::views::istream<std::string>(std::cin);
constexpr std::string_view delim{"-+-"};
std::ranges::for_each(isv | std::views::lazy_split(delim), act_on_substring);

但这段代码无法编译:

<source>:21:31: error: invalid operands to binary expression ('basic_istream_view<basic_string<char, char_traits<char>, allocator<char>>, char, char_traits<char>>' and '_Partial<_LazySplit, decay_t<const basic_string_view<char, char_traits<char>> &>>' (aka '_Partial<std::ranges::views::_LazySplit, std::basic_string_view<char, std::char_traits<char>>>'))
   21 |     std::ranges::for_each(isv | std::views::lazy_split(delim), act_on_substring);
      |                           ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

为什么?

c++
  • 1 个回答
  • 90 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve