我们都同意公共(public)变量不利于封装等等。但是,我注意到很多代码都在做这种事情:classfoo{private:intinteger_;stringsomeString_;//othervariablespublic:int&integer(){returninteger_;}string&someString(){returnsomeString_;}//other"functions"}intmain(){foof;f.integer()=10;f.someString()="something";return0;}我已经看到很多地方都在使用它,但我不明白为什么。基本上,
我有以下一段C++17代码:templatestructA{A(Callbackc=&noop){}private:staticvoidnoop(){}};intmain(){Aa{};}Clang6编译这个没有任何错误,但是GCC8.2说:Infunction‘A(Callback)->A[withCallback=void(*)()]’:3:24:error:‘staticvoidA::noop()[withCallback=void(*)()]’isprivatewithinthiscontextA(Callbackc=&noop){}^~~~~5:14:note:declare
我有以下一段C++17代码:templatestructA{A(Callbackc=&noop){}private:staticvoidnoop(){}};intmain(){Aa{};}Clang6编译这个没有任何错误,但是GCC8.2说:Infunction‘A(Callback)->A[withCallback=void(*)()]’:3:24:error:‘staticvoidA::noop()[withCallback=void(*)()]’isprivatewithinthiscontextA(Callbackc=&noop){}^~~~~5:14:note:declare
g++拒绝我访问一个类型,只是因为它恰好是一个私有(private)祖父。这有意义吗?structA{};structB:privateA{};structC:B{voidfoo(Aconst&a){}};编译得到:1:10:error:‘structAA::A’isinaccessible6:12:error:withinthiscontext我的意思是:我从不想以祖先的身份访问A。事实上,如果A是B的私有(private)祖先,那么除了B(即C)?当然,我可以使用protected继承,但在我的情况下它并没有什么意义。 最佳答案
g++拒绝我访问一个类型,只是因为它恰好是一个私有(private)祖父。这有意义吗?structA{};structB:privateA{};structC:B{voidfoo(Aconst&a){}};编译得到:1:10:error:‘structAA::A’isinaccessible6:12:error:withinthiscontext我的意思是:我从不想以祖先的身份访问A。事实上,如果A是B的私有(private)祖先,那么除了B(即C)?当然,我可以使用protected继承,但在我的情况下它并没有什么意义。 最佳答案
我使用boost::python来包装一个C++类。此类不允许复制构造函数,但python模块总是想创建一个。C++类看起来像这样(简化)classFoo{public:Foo(constchar*name);//constructorprivate:ByteArraym_bytearray;};ByteArray类继承自boost::noncopyable,因此Foo没有复制构造函数。这是Python模块stub:BOOST_PYTHON_MODULE(Foo){class_("Foo",init());}在编译boost::python模块时,我收到错误,因为ByteArray继承
我使用boost::python来包装一个C++类。此类不允许复制构造函数,但python模块总是想创建一个。C++类看起来像这样(简化)classFoo{public:Foo(constchar*name);//constructorprivate:ByteArraym_bytearray;};ByteArray类继承自boost::noncopyable,因此Foo没有复制构造函数。这是Python模块stub:BOOST_PYTHON_MODULE(Foo){class_("Foo",init());}在编译boost::python模块时,我收到错误,因为ByteArray继承
类记录如下:/***@briefNumberrepresentation*/classCNumber:publicCElem{/**@briefHoldstruefornegativevalues*/boolneg;...但是,代码中记录的变量没有出现在文档中(类摘要显示正常...)。我做错了什么? 最佳答案 这是私有(private)的。使其公开或protected,它会显示出来,或者通过在配置文件(通常是“Doxyfile”)中将EXTRACT_PRIVATE标记设置为YES来配置Doxygen以显示私有(private)成员)
类记录如下:/***@briefNumberrepresentation*/classCNumber:publicCElem{/**@briefHoldstruefornegativevalues*/boolneg;...但是,代码中记录的变量没有出现在文档中(类摘要显示正常...)。我做错了什么? 最佳答案 这是私有(private)的。使其公开或protected,它会显示出来,或者通过在配置文件(通常是“Doxyfile”)中将EXTRACT_PRIVATE标记设置为YES来配置Doxygen以显示私有(private)成员)
在下面的例子中,为什么B::f()被调用,即使它是私有(private)的?我知道这个事实:在调用点使用用于表示调用成员函数的对象的表达式类型检查访问。#includeclassA{public:virtualvoidf(){std::cout 最佳答案 因为标准是这样说的:[C++11:11.5/1]:Theaccessrules(Clause11)foravirtualfunctionaredeterminedbyitsdeclarationandarenotaffectedbytherulesforafunctionthatl