c++20相关内容
从标准的6.7.7(临时对象)中可以看到: 当将类类型X的对象传递到函数或从函数返回时,如果X至少有一个合格的复制或移动构造函数([特殊]),每个这样的构造函数都是平凡的,并且X的析构函数要么是平凡的,要么是删除的,则允许实现创建一个临时对象来保存函数参数或结果对象。临时对象分别从函数实参或返回值构造,函数的参数或返回对象被初始化,就像使用符合条件的普通构造函数复制临时对象一样(即使该构造函
..
新发布的草案[expr.prim.req]/6中提到: 如果将模板参数替换为要求将 总是导致替换失败,程序格式错误;否 需要诊断。[ ;示例: template concept C = requires { new int[-(int)sizeof(T)]; // ill-formed, no diagnostic required };
..
由于模板和动态多态不能很好地融合,我目前正在为Loggable类型设计一个概念,而不是一个接口(用抽象类实现),它支持操作: logger.log(LogLevel::info)
..
从C++协程的最终挂起中调用handle.destroy()是否有效? 根据我的理解,这应该很好,因为协程当前已暂停,不会再次恢复。 仍然,AddressSaniizer报告以下代码片段的heap-use-after-free: #include #include using namespace std;
..
在C++20(最新草案)中,给出了以下代码: struct B { int mb; }; struct D : B { int md; }; 这六个表达式中哪些是格式错误的,哪些不是? /*1*/ D{42, 43} /*2*/ D{{42}, 43} /*3*/ D{42, .md = 43} /*4*/ D{{42}, .md = 43} /*5*/ D{.mb = 42, .
..
违反严格别名规则会产生未定义的行为,例如,通过网络将结构发送到字符缓冲区,然后该字符指针被C样式/std::reinterpret_cast()强制转换为结构指针。 C++std::bit_cast() function看起来可以用来在(实现?)定义的方式,即不违反严格的别名规则。 示例: #include #include
..
根据cp首选项,使用奇怪的循环模板模式(CRTP)技术定义视图的助手类模板view_interface。 它们背后的设计理念是什么?与重写派生类中的虚拟基类方法相比,是否有显著优势? 推荐答案 如果您为基类提供虚函数,则它将具有这些函数。一直都是。它永远不能不具有这些函数,并且从它派生的每个类都将继承这些函数。 view_interface具有empty函数当且仅当该类型的范围
..
我有一个使用dat.h库在C++14下工作的函数,但我将我的程序转换为使用C++20,但它不再工作。请问我做错了什么? 我的C++14/dat.h代码如下: #include // latest, installed via vcpkg #include auto StringToUnix(const std::string& sourc
..
我阅读了此链接https://gcc.gnu.org/wiki/cxx-modules,并尝试从此网站复制以下示例。我已经知道这个编译器部分支持模块系统。(注意:我使用的是Windows) // hello.cc module; #include #include export module hello; export void greete
..
#include #include #include #include struct InitialSuspend{ bool await_ready(){ return false; } bool await_suspend(std::experim
..
我有以下示例代码: #include struct Base { bool operator==(const Base& rhs) const { return this->equalTo(rhs); } virtual bool equalTo(const Base& rhs) const = 0; }; inline
..
C++20的严格的别名规则[basic.lval]/11是否任意允许... 在char*和char8_t*之间强制转换 string str = "string"; u8string u8str { (char8_t*) &*str.data() }; // c++20 u8string u8string u8str2 = u8"zß水🍌" string str2 { (char*
..
我正在尝试C++20的Range接口,并且我添加了一个构造函数,该构造函数接受类容器类型的Range。 class element { ... }; class myclass { public: template myclass(Iter first, Iter last) : els(first, last) { } tem
..
我在working draft of standard C++中发现了一个可能的矛盾。首先我介绍事实,最后是我的问题。 建立整数折算等级时,[conv.rank]/1.1表示 没有两个带符号的整数类型[...]应具有相同的整数 转换等级,即使它们具有相同的表示形式。 [basic.fundamental]/8表示: 类型wchar_t是具有实现定义的不同类型 带符号或无符号
..
我知道关于这个话题有几个问题,但请听我说完。 我知道我们可以在未评估的上下文中使用无捕获lambdas(如decltype),但是可以捕获的lambdas怎么办? 我在当前的C++标准中找不到任何可以表明这是C++20以后的问题的东西,但我绝不是语言律师。 我所看到的是,主要的编译器在their results方面有所不同。 这些概念有效吗? template
..
std::bit_cast显然是在c++20中引入的。而std::start_lifetime_as是在c++23中建议的(来自P0593R5)。由于它们似乎都要求所涉及的数据类型无论如何都是微不足道的,那么一旦引入后者,还需要前者吗? 对于没有提供有关这些新功能的更多信息,提前表示歉意。我是在看了cppcon 2019关于打字双关语的讲座后才听说他们的,而且我在Google上找不到太多关于
..
这是在思考Thread sanitizer warnings after using parallel std::for_each时出现的。 具有并行执行策略的std::for_each算法可以在实现创建的工作线程中执行代码。这些线程是否与调用线程对for_each的调用和返回同步,或者类似的情况?常识似乎表明它们应该这样做,但我在C++20标准中找不到保证。 考虑以下简单示例(try
..
我正在尝试实现一个小型网络库来学习概念,并且我正在尝试找到一种方法来定义简洁的概念,而不必在依赖的概念上携带模板参数。例如,我有以下概念: template concept bool Value = true; template concept bool Buffer = requires(BufferT buf)
..
考虑使用C++20中的Ranges库的以下代码: #include #include #include int main() { std::vector v{0,1,2,3,4,5,6,7}; auto transformed = std::ranges::views::transform(v, [](i
..
正在尝试实现the following code: template concept SizedRangeOf = std::ranges::sized_range && std::same_as, V>; template cons
..