c++ 相关问题

C ++是一种通用编程语言。它最初被设计为C的扩展,并保持类似的语法,但现在是一种完全不同的语言。使用此标记来查询有关使用C ++编译器编译的代码的问题。对特定标准版本[C ++ 11],[C ++ 17]等相关问题使用版本特定标记。

CMake - 共享库 - 缺少 IDE 支持

我正在研究一个项目结构,该结构发布于: https://github.com/veritacodex/IB.Cpp.Api.Client 您可能已经见过类似的结构: 有一个图书馆的文件夹,在...

回答 1 投票 0

决定模板类是包含 2 个变量还是仅包含 1 个变量

我想要一个嵌套类 B,其行为如下: 如果 T 为 void,则 B 只有一个成员字段 sz 并且 sizeof(B) == sizeof(sz) 否则,B 有一个成员字段 sz 并以某种方式获得 T #我...

回答 1 投票 0

在 C++ 中使用内联汇编计算 n 阶矩阵的元素和的问题

问题是我有一个条件,应该将一个元素添加到总和中。如果元素的索引之和( j+i>4 ),则将该元素添加到总和中;否则,忽略它。 我...

回答 1 投票 0

检查 --ffast-math 下的 nan

假设(同时避免彻夜讨论原因)我使用 -ffast-math 并且我的程序执行十次牛顿迭代。它们要么收敛,要么到那时就会出现 NaN。 这就是我...

回答 1 投票 0

为什么 `std::string_view` 不可修改?

我开始用 std::string_view 进行实验。 它有一个非常丑陋的特点。你不能说: std::string_view 和 std::string_view 就像很棒的 std::span 一样。 所以,你不能...

回答 1 投票 0

C++ 中 64 位整数的按位(Bitshift)运算

我正在尝试处理位板,这需要我在 64 位无符号整数中设置特定位。为了设置位 i,我对有问题的位板执行按位或运算,左移 nu...

回答 3 投票 0

QT5.15.2 中的qspinbox64

我尝试按照建议创建一个 qspinbox64 QT 中的 64 位 int Spin Box qspinbox64.h #定义QSPINBOX64_H #包括 #包括 命名空间 Ui { QSpinBox64 类; } 班级

回答 2 投票 0

多个cpp文件中不同的模板实例化

我最近偶然发现了一个好奇的 cpp 模板架构。模板类声明位于头文件中,定义位于 cpp 文件中,并带有一些显式实例化。不那么常见...

回答 1 投票 0

又一个警告:“<anonymous>”可能会在未初始化的情况下使用

我看到了许多关于同一警告的其他问题,但我的代码似乎不同。 而且,总的来说,我只能通过 -Os 选项才能得到这个。 #包括 使用命名空间 std ; 模板 我看到了许多其他关于同一警告的问题,但我的代码似乎不同。 而且,总的来说,我只能通过 -Os 选项才能得到这个。 #include <iostream> using namespace std ; template <class TYPE,class FUNC> struct AutoDestruct { const TYPE & var ; FUNC func ; AutoDestruct ( const TYPE & v , FUNC f ) : var(v),func(f) {} ~AutoDestruct () { func(var) ;} }; class Dictionary { public: Dictionary & wipe () { cout << "Dictionary.wipe()\n" ; return *this ;} }; static void wipe_dict ( Dictionary * dict ) { dict->wipe() ;} typedef AutoDestruct<Dictionary*,void(*)(Dictionary*)> AutoWipe ; int main () { cout << "enter main function " << __DATE__ << " " << __TIME__ << endl ; Dictionary headers ; AutoWipe auto_wipe( &headers,wipe_dict ) ; cout << "exit main function\n" ; } 命令行是: g++ -std=c++11 -Os -Wall -Wextra test.cpp && ./a.out N.B.:如果我删除 -Os 选项,我不会收到任何警告。 输出是: test.cpp: In function ‘int main()’: test.cpp:9:48: warning: ‘<anonymous>’ may be used uninitialized [-Wmaybe-uninitialized] 9 | ~AutoDestruct () { func(var) ;} | ^~~~ test.cpp:25:46: note: ‘<anonymous>’ was declared here 25 | AutoWipe auto_wipe( &headers,wipe_dict ) ; | ^ enter main function May 13 2024 20:14:01 exit main function Dictionary.wipe() 编译器是: g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 这是我真实代码的一个非常简单的摘录,只是为了暴露警告。 但请注意,在我的真实代码中,执行 auto_wipe 时,我收到警告 AND 段错误! 知道警告+段错误原因吗? 预先感谢! 我认为走一小段路是值得的,因为我想我不是唯一一个最初误读你的代码的人。我认为我正在阅读的代码是这样的: #include <iostream> using namespace std; template <class TYPE,class FUNC> struct AutoDestruct { TYPE& var ; FUNC func ; AutoDestruct(TYPE& v, FUNC f ) : var(v),func(f) {} ~AutoDestruct () { func(var) ;} }; struct Dictionary { Dictionary & wipe () { cout << "Dictionary.wipe()\n" ; return *this ;} }; static void wipe_dict ( Dictionary & dict ) { dict.wipe() ;} typedef AutoDestruct<Dictionary,void(*)(Dictionary&)> AutoWipe ; int main () { Dictionary headers ; AutoWipe auto_wipe( headers,wipe_dict) ; } auto_wipe 存储对 headers 的引用,当调用它的析构函数时,它会调用 headers.wipe();。然后调用 headers 析构函数,一切都很好。 虽然在你的代码中,这里: AutoWipe auto_wipe( &headers,wipe_dict ) ; 您的 auto_wipe 存储对临时 &headers 的引用。当 auto_wipe 的析构函数被调用时,对象 headers 当然仍然存储在相同的内存地址中。然而,由 &headers 产生的临时指针早已消失,并且该成员是一个悬空引用。您可以按照注释中的建议复制指针,也可以按照上面的方式存储对实际对象的引用。 TL;DR:编译器发出警告是正确的。您存储一个悬空引用。使用地址消毒剂会突出这个问题。

回答 1 投票 0

co_yield 可以不返回任何内容吗?

使用新的 C++ 协程,是否可以定义一个协程类,我可以使用它从函数中产生而不返回值?或者yield 总是必须返回一些东西?我只是

回答 1 投票 0

我需要遵守五人规则吗?

所以在 https://en.cppreference.com/w/cpp/language/rule_of_ Three 上它说: 因为存在用户定义的(或 = 默认或 = 声明的删除)析构函数、复制构造函数或复制赋值

回答 2 投票 0

std::set<std::unique_ptr<int>> 和 std::views::as_rvalue

我有以下代码,由于某种原因,只有最后一个块不起作用。 我最初认为这可能与 unique_ptr 仅移动或 std::set 具有 const 键有关,但后来它是 unc...

回答 1 投票 0

如何为类模板的成员函数定义显式特化?

我需要将类模板 X 的成员函数专门化为某种类型(假设为 double)。 虽然类 X 本身不是类模板,但它工作得很好,但是当我将其设为模板时,GCC 开始给出...

回答 3 投票 0

在 Ubuntu 16.04 上使用 Intel MKL 编译 R

我通过运行以下命令安装了 Intel MKL 库: # 密钥取自 https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-apt-repo wget https://apt.repos.intel.com/intel-gpg...

回答 1 投票 0

将可变参数模板参数转换(和操作)为 std::initialise_list

我重新设计了一个功能 void func(std::initializer_list msgList); 进入 void func(std::initializer_list msgList); (优化,减少 strlen 调用)wh...

c++
回答 1 投票 0

在 Windows、VS2K17 上调试构建 mysql-connector C++ 应用程序

我正在尝试在调试模式下运行一个简单的 mysql 连接器(c++)应用程序,但当它到达以下行时似乎失败了(请参阅下面的完整源代码): pstmt = con->prepareStatement(查询)...

回答 1 投票 0

使用基数排序实现 std::sort 重载是否合法?

对于适用的数据类型,良好的基数排序可以大幅击败比较排序,但 std::sort 通常作为 introsort 实现。有没有理由不使用基数排序

回答 2 投票 0

C++:获取临时文件,跨平台

我正在寻找一种跨平台的方式来指定临时文件。例如,在 Linux 中,该目录位于 /tmp 目录中,而在 Windows 中,该目录位于类似于 C:\Users\Username\AppData\Local\T...

回答 7 投票 0

从基类获取类型

假设我们有 派生类:公共 Base1、公共 Base2、...、公共 Base> {}; 如何编写一个从 Derived 获取类型 std::tuple 的类?也许基地需要...

回答 2 投票 0

为什么 unordered_map 和 map 具有相同的性能?

这是我的代码,我的 unordered_map 和 map 的行为相同,并且执行时间相同。我是否遗漏了这些数据结构的某些内容? 更新:我已经根据情况更改了我的代码...

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.