草庐IT

static成员

全部标签

c++ - 为什么 "this"指针用于调用派生成员函数?

在this上阅读关于虚函数的教程(与本例无关)链接,我找到了这段代码。classWeapon{public:voidfeatures(){coutWeapon::features();cout类Weapon派生自类Bomb,其中调用了Weapon的成员函数。为什么使用“this”指针调用函数Weapon::features()?这不是已经隐式给出了吗? 最佳答案 this是隐式给出的,是否显式编写通常是风格问题。在您的情况下,我会说它不会提高可读性。然而,在其他情况下,显式写入this是有意义的,甚至是必要的为了避免局部变量和数据成

c++ - 使用折叠表达式初始化静态 constexpr 类数据成员不编译

我对某段代码无法编译感到困惑,即使非常相似的代码段确实可以编译。这不会编译:#includetemplateclassFoo{staticconstexprstd::size_tBIT_COUNT=(GROUPS+...);usingBits=std::bitset;Bitsbits;};classBar:publicFoo{};具有启发性错误1>c:\...\source.cpp(5):errorC2059:syntaxerror:'...'。编译:#includetemplateclassFoo{usingBits=std::bitset;Bitsbits;};classBar:p

c++ - boost static_vector 而不是 std::is_trivially_destructible

根据thisexample(左例)#include#includestructX{intk;std::arraya;boost::container::static_vectorb;~X()=default;};inthuh(){std::arrayx;return0;}看起来像boost::container::static_vector当T时可以轻易破坏是(当b被销毁时,不会在X上循环)。huh优化为xoreax,eax;ret(即return0不遍历数组。当我改用具有非平凡析构函数的包含类型时(右例)#include#includestructY{~Y();};structX{i

c++ - 使用 C++,使用 SFINAE 测试静态成员是否存在,返回错误值

我正在学习模板元编程。当尝试使用以下代码测试静态成员时,第二个SFINAE总是返回错误值:#include#include//ts_astructts_a{staticinta;};//ts_bstructts_b{staticintb;};//has_atemplate>structhas_a:std::false_type{};templatestructhas_a>:std::true_type{};//has_btemplate>structhas_b:std::false_type{};templatestructhas_b>:std::true_type{};intmain

c++ - 如何通过派生类访问基类的 protected 成员?

这个问题在这里已经有了答案:Accessingprotectedmembersinaderivedclass(8个答案)关闭3年前。我正在尝试几个关于继承的程序,结果是以下导致了错误,但我真的不知道原因。#includeusingnamespacestd;classBase{protected:intx=0;};classDerived:publicBase{//OK:accessprotectedmemberviathisvoidg(){cout我希望派生类可以访问基类的公共(public)或protected数据成员和成员函数。然而它并没有像我想的那样起作用,谁能帮我阐明我的概念?

c++ - decltype-specifier 表示的类型是什么类型,其表达式是类类型的临时对象的成员?

假设我们有以下声明:structS{inta;};以下简单类型说明符表示的类型是什么?是int还是int&&?decltype(S{}.a)(这个问题旨在解决C++17,但也感谢解决其他版本标准的答案。) 最佳答案 它是int。每[dcl.type.simple]/4:Foranexpressione,thetypedenotedbydecltype(e)isdefinedasfollows:[...]otherwise,ifeisanunparenthesizedid-expressionoranunparenthesizedcl

c++ - 2 成员结构是否可以安全地替代位压缩 int?

我有一些现有的C++代码可以通过网络发送和接收uint32_t数组。由于我的协议(protocol)发生了变化,我想用一对两个uint16_t替换这个数组中的每个条目,如果可能的话,我想这样做而不改变我发送的位数网络。将两个uint16_t值组合成单个32位宽值的一种明显方法是将低级位打包到uint32_t中,并保持数组定义不变.所以发件人的代码看起来像这样:uint32_titems[ARR_SIZE];for(std::size_ti=0;i(static_cast(field2)(field1));}接收方的代码如下所示://receiveitemsfor(std::size_t

c++ - 检测 SFINAE 的 POD 类型的第一个成员

给定一些与此类似的POD结构:structStandardHeader{uint32_tfield1;uint32_tfield2;};structTypeA{StandardHeaderHeader;uint8_tfield3;};structTypeB{StandardHeaderHeader;uint16_tfield4;};我想写一个类型特征(或类似的东西,最终可以在static_assert和std::enable_if中使用,或者以其他方式禁用模板化方法),它可以检测StandardHeader的存在。字段作为标准布局类型的第一个成员——即。这样reinterpret_ca

c++ - 用于检查未初始化类成员的工具、Visual Studio 设置

我正在将一个庞大而复杂的C++服务器从Solaris移植到Windows。由于未初始化的成员变量,我面临很多麻烦。在Solaris上,它们默认设置为0值,因此一切正常。但是,在Windows上,这些成员变量会分配垃圾值,从而在系统中造成困惑。代码库太大,无法手动检查每个类。如果成员变量未在构造函数中初始化,您是否知道任何工具或VisualStudio设置会发出警告?提前致谢! 最佳答案 cppcheck在查找未初始化的变量方面做得很好。 关于c++-用于检查未初始化类成员的工具、Visu

c++ - 无法访问单例类析构函数中的私有(private)成员

我正在尝试实现这个单例类。但是我遇到了这个错误:'Singleton::~Singleton':无法访问类'Singleton'中声明的私有(private)成员这在头文件中被标记,最后一行包含右大括号。谁能帮我解释一下是什么导致了这个问题?下面是我的源代码。单例.h:classSingleton{public:staticSingleton*Instance(){if(!pInstance){if(destroyed){//throwexception}else{Create();}}returnpInstance;}private:staticvoidCreate(){static