我一直在使用 C++ 并使用 clang++ 进行编译。我想包含我正在编写的 X11 程序的<xcb/xkb.h>标头。
不幸的是,这个标头用于explicit某些字段名称(例如第 727 行),而这是 C++ 中的关键字。
有办法解决这个问题吗?
xcb/xkb.h:
// ...
#ifdef __cplusplus
extern "C" {
#endif
// ...
typedef struct xcb_xkb_set_explicit_t {
xcb_keycode_t keycode;
uint8_t explicit;
} xcb_xkb_set_explicit_t;
// ...
#ifdef __cplusplus
}
#endif
// ...
Run Code Online (Sandbox Code Playgroud) 在我的 clang 和 libc++ 版本(near HEAD)中,这static_assert通过了:
static_assert(std::is_copy_constructible_v<std::vector<std::unique_ptr<int>>>)
Run Code Online (Sandbox Code Playgroud)
当然,如果您实际上尝试复制构造唯一指针的向量,它将无法编译:
../include/c++/v1/__memory/allocator.h:151:28: error: call to implicitly-deleted copy constructor of 'std::unique_ptr<int>'
::new ((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
[...]
note: in instantiation of member function 'std::vector<std::unique_ptr<int>>::vector' requested here
const std::vector<std::unique_ptr<int>> bar(foo);
^
../include/c++/v1/__memory/unique_ptr.h:215:3: note: copy constructor is implicitly deleted because 'unique_ptr<int>' has a user-declared move constructor
unique_ptr(unique_ptr&& __u) _NOEXCEPT
Run Code Online (Sandbox Code Playgroud)
我认为这种情况是因为实现在不可复制构造std::vector<T>时不使用 SFINAE 来禁用复制构造函数。T但为什么不呢?标准中是否有规定必须以这种方式工作?这是不幸的,因为这意味着我自己的围绕复制构造性的 SFINAE 并没有在向量方面做正确的事情。
class A {
int x;
static int i;
};
int x = 10;
int A::i = x;
Run Code Online (Sandbox Code Playgroud)
当我编译上面的代码时,出现错误
<source>:8:12: error: invalid use of non-static data member 'A::x'
8 | int A::i = x;
| ^
<source>:2:9: note: declared here
2 | int x;
| ^
Run Code Online (Sandbox Code Playgroud)
是什么导致了这个错误?
(我最初的问题是关于“发生了什么_BitInt?”但这是基于对某些 cppreference 页面的误读)。
C++23 标准草案的库简介第 16.2 节表示 C++ 支持 C 标准库。然而,对特定 C 标准的唯一引用是在 16.3 的脚注 (#141) 中。这是 2018 年 C 标准,其中没有提到_BitInt. _BitInt但我在 C 23 标准草案中找到了描述。
C++23 标准是否包含特定版本的 C 标准库?
在许多大型项目中,甚至在Django等项目中,以及在官方 Python 文档中,使用 list 列出文件中“可从外部获得”的模块组件__init__.py:
__all__ = [foo, bar, other]
Run Code Online (Sandbox Code Playgroud)
然而,记录
__all__ = (foo, bar, other)
Run Code Online (Sandbox Code Playgroud)
它也会起作用,理论上它不会显着提高代码性能。
为什么,那就用它来列出?
也许有一些我不知道的神奇 PEP?
运行这个简单的程序时,根据编译器的不同,会观察到不同的行为。
\n它true在由 GCC 11.2 编译时以及false由带有 的 MSVC 19.29.30137 编译时打印(两者都是今天的最新版本)。
#include <type_traits>\n#include <iostream>\n\nstruct S {\n int a;\n \n S() = delete;\n S(S const &) = delete;\n S(S &&) = delete;\n S &operator=(S const &) = delete;\n S &operator=(S &&) = delete;\n ~S() = delete;\n};\n\nint main() {\n std::cout << std::boolalpha;\n std::cout << std::is_trivially_copyable_v<S>;\n}\nRun Code Online (Sandbox Code Playgroud)\n相关引用(来自最新的C++23工作草案N4901):
\n给定 20.15.5.4 [meta.unary.prop],如果 T 是如 6.8.1/9 [basic.types.general] 中定义的std::is_trivially_copyable_v<T>a,则定义为 true :trivially copyable type
\n算术类型 …
我正在使用 Oh My Zsh 和 Powerlevel10k 主题。
我直接从 Powerlevel10k 文档安装了推荐的字体,根据文档更新了终端、iTerm2 和 VS Code 中的字体设置,它基本上可以工作,只是提示符末尾总是有一些意外的字符(通常!1是 或!2)。到目前为止,我在文档、论坛搜索或互联网搜索中没有找到任何有助于解决此问题的内容。
提示符的 git status 部分中!2分支名称 ( ) 后面的含义
是什么?develop
任何可以帮助我解决这个问题的提示,甚至只是帮助我找到答案的正确搜索词,都将不胜感激。
我正在努力如何在 Python C API 中创建 python Enum 对象。enum 类已赋值tp_base给PyEnum_Type,因此它继承了 Enum 。但是,我无法找到一种方法来告诉 Enum 基类枚举中有哪些项目。我想允许使用__members__每个 Python 枚举提供的属性从 Python 进行迭代和查找。
谢谢你,
耶勒
以下 C++ 代码给出了 GCC 错误(例如 13.1,请参阅godbolt.org),其中编译器似乎将set成员函数模板与混淆std::set:
#include <set>
using namespace std;
template <typename T> struct C {
template <int S> void set(T const &) { }
};
template <typename T> struct D : C<T> {
void f(T const & v) { this->template set<0>(v); }
};
Run Code Online (Sandbox Code Playgroud)
它显然与该行有关,但我不明白当它由 显式限定时,using namespace std;编译器如何尝试set在全局或命名空间中查找。谁能启发我吗?stdthis->
Haskell 支持类型类,例如相等:
class Eq a where
(==) :: a -> a -> Bool
Run Code Online (Sandbox Code Playgroud)
Rust 对类型特征做了同样的事情:
pub trait Draw {
fn draw(&self);
}
Run Code Online (Sandbox Code Playgroud)
现在,可以在 Haskell 中声明一个列表,其元素必须属于相等类型类:(Eq a => [a]我相信在 Haskell 中a称为约束类型)。但是,列表的元素仍然必须是同一类型!说,全部Integer或全部Float或某事。然而,在 Rust 中,人们可以拥有一个值列表(向量),其中每个值都实现给定的特征,但它们不一定是相同的具体类型:Vec<Box<dyn Draw>>。有没有办法在 Haskell 中做同样的事情?就像,我想要一个值列表,但我关心的是每个值都属于某个类型类,但不一定是相同的具体类型。
c++ ×6
c ×2
python ×2
type-traits ×2
c++17 ×1
c++20 ×1
c++23 ×1
clang ×1
compiler-bug ×1
gcc ×1
git ×1
git-status ×1
haskell ×1
libc++ ×1
list ×1
oh-my-zsh ×1
python-3.x ×1
python-c-api ×1
standards ×1
tuples ×1
zsh ×1