C/C++开发
Another question引用C++标准: 3.8/1&q;类型T的对象的生存期在以下情况结束:-如果T是具有非平凡析构函数的类类型(12.4),则析构函数调用 开始,或者-对象占用的存储被重复使用,或者 已发布。&Quot; 这似乎意味着不允许从析构函数访问对象的成员。然而,这似乎是错误的,事实更像是Kerrek SB的回答中所解释的: 成员对象在构造函数体运行之前激活,
..
#include struct A { ~A(); }; A::~A() { std::cout
..
在下面的代码示例中,未调用派生类析构函数。知道为什么吗? 我有一个具有虚函数的基类。现在,我使用基类指针来创建派生类的新对象。我的理解是,当销毁派生类对象时,首先调用派生类的析构函数,然后调用基类。然而,我只看到基类的析构函数被调用。有人知道我做错了什么吗,或者我对C++的理解在哪里不正确? #include #include using namesp
..
这个问题基于Scott Meyers在他的书《更有效的C++》中提供的一个例子。考虑以下类: // A class to represent the profile of a user in a dating site for animal lovers. class AnimalLoverProfile { public: AnimalLoverProfile(const stri
..
例如,当我没有声明构造函数时,编译器将为我提供一个没有参数和定义(空体)的默认构造函数,因此不会采取任何操作。 那么,例如,如果我完成了一个对象,默认的析构函数不会重新分配(释放)该对象使用的内存吗?如果它没有,为什么我们会得到它? 而且,可能同样的问题也适用于默认构造函数。如果它什么也不做,为什么默认情况下会为我们创建它? 推荐答案 说编译器生成的默认构造函数不执行任何操作是
..
我正在寻找一个明确的答案(如果确实存在的话),即在通过boost::interprocess的managed_shared_memory创建静态共享内存块时,应该分配多少内存。甚至official examples似乎也分配了arbitrarily large内存块。 考虑以下结构: // Example: simple struct with two 4-byte fields st
..
我正在尝试将客户端证书发送到需要该证书的Web服务器。 如果我从命令行cURL命令发出请求,它就会工作。 我传递了--key文件名和--cert文件名,一切正常。 当我在libcurl库中执行此操作时,我执行以下操作: curl_easy_setopt(curl, CURLOPT_SSLCERT, client_cert_file.c_str()); curl_e
..
我正在尝试将变量传递给CURLOPT_POSTFIELDS。我的当前代码: size_t curl_write( void *ptr, size_t size, size_t nmemb, void *stream) { std::string cmd(static_cast(ptr), size * nmemb); redi::ipstream proc(cmd.c_
..
在C++20之前的问题Access index in range-for loop (answer)中提到 2020注意:使用基于lambda的解决方案可能比使用宏诡计更明智。 有人能发布基于lambda的C++20解决方案吗?C++20还有其他新的解决方案吗? 编辑:我有一个主循环,它在向量的大小上是多态的。由于我必须经常阅读和修改这段代码,我认为我有理由希望得到最好的解决方案
..
我正在学习C++概念,我有一个讨厌的问题: 我不知道如何区分成员变量是int类型的变量和成员变量是int&类型。 原因是我正在使用的检查使用的是instance.ember语法,而在C++中,它返回一个引用。 完整示例: #include #include template void print(T t)
..
std::initializer_list和有什么区别?两者都是某种类型的值的连续序列。这两家公司都没有所有权。 那么,我们什么时候使用第一个,什么时候使用后者? 推荐答案 简而言之,std::initializer_list用于创建新区域,用于初始化。而std::span用于引用现有范围,以获得更好的接口。 std::initializer_list是一种语言
..
我正在尝试实现一个委托类型,该类型将与泛型回调一起使用,并在存在重载集的情况下工作。 为简化起见,此处摘录了类,并将绑定方法实现为静态函数以简化问题。 template class Delegate; template struct Delegate
..
是否已定义概念,用于在C++20或Range-TS中指定特定类型的范围? 类似: template concept RangeOf = requires(T&& t) { requires std::same_as
..
In my question我收到了适合我的答复,但我不知道它是如何工作的。 尤其是,我不明白delete关键字和概念是如何删除operator
..
我在一个基于CMAKE的项目中使用clang 13.0.0,CMAKE_CXX_STANDARD被定义为20。以下代码导致编译错误(命名空间‘std’中没有名为‘u8string’的类型): #include #include int main() { #ifdef __cpp_char8_t std::u8string sss = u8"a
..
我一直在使用C++20协程,我偶然发现了thislambda捕获的生命周期不会延长到协程的整个生命周期的问题。 我想知道什么是安全捕获的,因为我必须将所有捕获复制到如下所示的新对象中: [a1=object]() -> task { // need to copy into a new object to safely reference for the lifet
..
我希望有接受任何固定类型容器的函数。例如,将同时接受std::array和std::array的函数。 我原以为使用Range可以做到这一点,但我意识到我的理解相当肤浅。 是否可以在没有模板的情况下实现? 编辑:我们是否可以使用范围库来定义一个类型,该范围库将执行与SPAN相同的操作,但将用于非连续容器?也许我的问题表达得不对,我的意思可能是视
..
我正在尝试实现数字文字运算符模板。 #include #include #include #include #include #include using namespace boost
..
如何将此问题link中的要求转换为概念 我尝试了以下操作: template concept MyConditions = ( U::value_type && Tin::value_type && Tout::value_type
..
using T = decltype(std::same_as) 我已经在VS2019上试过了。结果是T = bool。 这是由标准定义的,还是仅由特定编译器定义的属性? 我还没有找到关于这件事的任何官方消息。 https://en.cppreference.com/w/cpp/concepts 推荐答案 AConcept-idLikestd::same
..