草庐IT

static成员

全部标签

c++ - pointer_traits 为既不是 X<A, T...> 也没有提供成员 typedef element_type 的类型提供什么?

下面的结果是什么?它是格式错误、未定义的行为还是定义良好且格式正确的行为?structA{};std::pointer_traitsx;我之所以问,是因为好奇想知道,也想知道任意类型是不是指针。我还想包括shared_ptr和friend。我想知道是否有类型特征(谓词),如果没有,我是否可以使用pointer_traits并检测是否声明了element_type。 最佳答案 它表示从20.6.3p1开始格式错误,因为它没有element_type并且不是类模板实例化typedefseebelowelement_type;Type:P

C++11:私有(private)成员安全

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个答案)关闭9年前。让我们考虑下一段代码:#include#include"mydemangled.hpp"usingnamespacestd;structA{private:structB{intget()const{return5;}};public:Bget()const{returnB();}};intmain(){Aa;A::Bb=a.get();cout编译器(gcc4.7.2)大声说A::B是私有(private)的。好的。所以,我更改代码:intmain(){Aa;cout它不会大

c++ - 引用成员是好的做法吗?是常量成员吗?

我和一位同事正在争论const或引用成员是否永远是正确的做法。const和reference成员使类不可复制且不可移动,除非您编写自己的复制和移动运算符来忽略reference或const成员。我找不到仅仅因为某些成员是引用或const就忽略复制或移动的情况。我认为拥有一个不可移动的对象在逻辑上很少是合理的,并且是一个仅与类是否为locationinvariant有关的选择。.不可复制的对象更为常见,但是选择使类不可复制与它是否拥有逻辑上不可复制的资源,它是否代表唯一所有权等有关。我想不出唯一特征的原因是否具有引用或const成员意味着该类应该具有这些特征中的任何一个(不可复制或不可移

c++ - 访问 C++ 父类的私有(private)成员

不幸的是,我有一个基本的C++问题让我感到困惑。最近我看到一篇文章使用向下转换来访问类的私有(private)成员。我的问题是它为什么有效?鉴于我有一个父类P和一个类型为dummy*的私有(private)成员m_p然后使用的方法是创建一个hack类hackP,如下所示:classhackP:publicP{public:dummy*m_p;};显然可以使用如下代码片段访问classP私有(private)成员m_pPparent=...;hackP*hp=(hackP*)&parent;//accessparentm_pashp->m_p如有任何帮助,我们将不胜感激。

c++ - 将外部对象作为类成员的引用的优点/缺点?

考虑以下代码:#includestructB{voidbar(){std::coutA的构造函数将b的引用作为参数,A改变了b的状态它的成员函数通过引用。我的问题:这样做被认为是好的做法吗?优点/缺点是什么?有什么替代方案? 最佳答案 Isitagoodpracticetodoso?它可能非常危险。您需要确保B的生命周期比引用B的A长。有时,使用OP中所示的引用是非常明智的。Whatarethecons?在某些情况下确保B比A长寿可能非常棘手,如果您引用参数而不是复制它,客户可能真的会感到惊讶。Whatcouldbeanaltern

c++ - 为什么当它作为静态成员变量出现时没有调用c++构造函数?

我有一个奇怪的问题,在A类中声明一个名为B类的静态成员变量。并在cpp文件中初始化。但是从未调用过B类的构造函数。我尝试使用一些小测试,可以正常调用测试构造函数。所以这对我们的生产系统来说很奇怪。像这样的代码,在hpp中:classTest{public:Test(){ofstreamfile("/tmp/wup.txt",ios::app);file在另一个cpp文件中我用初始化TestTsdNAExtPersonality::test;我试过很多方法,但我发现所有的方法都没有用。没有设置变量为成员变量而是全局变量==>也不能输出将成员变量改成指针,初始化方式改成new==>no环境

c++ - 类模板中的静态成员变量

当您有一个包含静态成员的(非模板化)类时,例如:classFoo{public:staticintx;};然后Foo::x必须在一个且只有一个翻译单元中定义,否则编译器会提示多个定义。所以在somefile.cpp你必须定义它:intFoo::x=10;这样,任何访问Foo::x的翻译单元正在访问相同的内存地址。但是如果Foo怎么办?是类模板吗?templateclassFoo{public:staticintx;};现在,Foo::x可以在头文件中定义:templateintFoo::x=10;所以,如果类模板Foo在foo.hpp中定义,和translation_unit1.cpp

c++ - 在 C++ 中,类是否有可能拥有一个多维数组成员,其维度和范围直到运行时才知道?

我最初问usingnestedstd::arraytocreateanmultidimensionalarraywithoutknowingdimensionsorextentsuntilruntime但这有TheXYProblem尝试使用std::array来完成它。问题One-lineinitialiserforBoost.MultiArray和HowdoImakeamultidimensionalarrayofundeterminedsizeamemberofaclassinc++?他们的答案提供了一些有用的信息,如何使用Boost::MultiArray来避免在运行时需要知道维

c++ - 模板类 - 成员函数特化

示例代码:templateclassA{public:A(Tt):x(t){}TgetX();private:Tx;};templateTA::getX(){returnx;}//memberfunctionspecializationtemplate//workswithandwithouttemplatelongA::getX(){return1000L;}在成员函数专门化之前,以上代码在使用和不使用模板的情况下都有效。为什么?在这种情况下有什么区别?编辑1:我以这种方式使用该模板(VS2012编译器):Aa1(1);couta2(1);cout 最佳答

c++ - '非静态引用成员,不能使用默认赋值运算符'

当我尝试编译我的代码时出现此错误:非静态引用成员‘Timestep&Timestep::previousTimestep’,不能使用默认赋值运算符我创建了一个Problem,它创建了一个Timestep对此Timestep的引用应该存储在vectorsolution。此外,我想存储对前一个Timestep的引用-对于第一个Timestep来说,这将是对自身的引用......我读到,如果我在一个类中有const成员,我需要定义一个自己的运算符,我试图将其设置为相等。但是,从代码中删除了所有const元素,它仍然不起作用。有什么建议么?非常感谢。classProblem{public:vo