(我最初的问题是关于“发生了什么_BitInt?”但这是基于对某些 cppreference 页面的误读)。
C++23 标准草案的库简介第 16.2 节表示 C++ 支持 C 标准库。然而,对特定 C 标准的唯一引用是在 16.3 的脚注 (#141) 中。这是 2018 年 C 标准,其中没有提到_BitInt. _BitInt但我在 C 23 标准草案中找到了描述。
C++23 标准是否包含特定版本的 C 标准库?
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
Run Code Online (Sandbox Code Playgroud)
IMO,一个类具有公共构造函数的唯一原因是在程序中使用该类的独立实例。如果仅存在一个类以使其他类从其派生(如的情况basic_ios),则该类的所有构造函数都应为protected。的构造函数std::ios_base均受保护。但是,由于某种原因,该标准的设计者将这一构造函数basic_ios公开了。
basic_ios用作几种流类型的基类,并且我不能设想用例中至少有一个不是a basic_istream或的用例basic_ostream。有一个吗?
在使用一些自定义比较器时,我遇到了对仅具有单个可能值的类型的需求。存在类似std::nullptr_t和 空结构这样的类型。
然后我考虑了使用枚举的可能性。我可能会声明一个具有单个值的枚举,例如
enum E
{
only_value // BUT IS IT??
};
Run Code Online (Sandbox Code Playgroud)
但似乎该标准规定,适合包含声明值的“最小位字段”的所有基础类型的值都是有效的。
(如果源值是浮点型,则转换为枚举的基础类型,如果它适合足够大以容纳目标枚举的所有枚举器的最小位字段,则源值在范围内。)
如果您声明一个仅包含一个枚举器的枚举,则它的最小值可以是一位。按照该逻辑,具有该位的其他值的未命名枚举器应该是合法的。如果枚举基于有符号整数,则-1和0始终合法。对于无符号整数,0和1总是合法的。
标准中是否还有其他内容使未命名的位值非法或 UB?
我经常为类创建this_typetypedef 以缩短成员函数签名。然而,我在使用时遇到了这个奇怪的情况std::enable_if_t。
#include <iostream>
#include <string>
#include <type_traits>
template <class T, class Enable = void>
struct foo;
template <class T>
struct foo <T, std::enable_if_t<std::is_arithmetic_v<T>>>
{
T data {};
//typedef foo<T, void> this_type; // <-- can't do this
//typedef foo<T, std::enable_if_t<true>> this_type; // <- can't do this either
typedef foo<T, std::enable_if_t<std::is_arithmetic_v<T>>> this_type; // have to do this
foo () = default;
explicit foo(T i): data(i) {}
foo (this_type const &) = default;
static constexpr auto isame = …Run Code Online (Sandbox Code Playgroud)