草庐IT

non-passphrase-protected

全部标签

c++ - 多线程系统中不 protected get 函数 - 需要 volatile 吗?

我正在开发一个多线程程序,该程序提供对进程间通信系统一侧的访问。从未使用过volatile,我正在尝试找出它的正确用法。我知道(相关部分)volatile告诉编译器它所应用的变量可能被写入该线程的指令序列之外,因此它应该在每次使用时重新读取内存。我看过一些关于volatile的教程,但大多数要么有最简单的示例(例如全局共享变量),要么只是相互复制。然后我不时看到有人认为volatile并没有按照你的想法去做。另外,有些人说,如果你不编写设备驱动程序或类似的东西,你不应该使用volatile(Is'volatile'neededinthismulti-threadedC++code?)。

c++ - 具有混合继承修饰符的菱形继承(钻石问题)( protected /私有(private)/公共(public))

假设我们有类A、B、C、D,其中A是基础,B、C是介于两者之间,D是在菱形模型中派生的。注意:classB在private模式下继承virtualyclassA,C类在保护模式下继承虚拟A类。classA{public:intmember;//notethismember};classB:virtualprivateA//noteprivate{};classC:virtualprotectedA//noteprotected{};classD:publicB,//doesn'tmetterpublicorwhateverherepublicC{};intmain(){Dtest;te

c++ - begin() 如何知道要返回哪种返回类型(const 或 non-const)?

这非常有效:listl;list::const_iteratorit;it=l.begin();list::iteratorit2;it2=l.begin();我不明白list是怎么来的“知道”它必须返回iteratorbegin()版本或const_iteratorbegin()const一个。我正在尝试为我的容器(一个trie)实现迭代器,但我遇到了这个问题。难道C++不应该不按返回类型处理差异化(除非使用奇怪的技巧)?这是一些代码和我得到的编译器错误:我的Trie是一个模板化的trie,可以包含任何类型。我有一个Trie::iter非常量迭代器和一个Trie::const_ite

c++ - 用这个技巧从外部访问 protected 成员,但这有效吗?

如果我有以下类(class):classFoo{protected:inti;public:Foo():i(42){}};当然,我无法从外部访问protected成员,但我可以做这个小技巧:首先我创建一个继承Foo的新类:classFoo2:publicFoo{public:intGetI(){returni;}};现在,只要我有一个Foo的实例或指向此类实例的指针,我就可以通过强制转换访问protected成员(因为我不使用任何其他成员):Foo*f=newFoo();Foof2;std::coutGetI()(f2)).GetI()我明白为什么会这样,但会不会有任何不良后果?编译器

c++ - 'non-virtual interface' 和 'abstract interface' 有什么区别?

我正在用C++实现设计模式,我希望我的类通过组合来利用接口(interface),这让我研究了实现接口(interface)的不同方法。我想澄清一下这个术语的定义。 最佳答案 非虚拟接口(interface)是一个公共(public)成员函数,它不是虚拟的,但通常希望根据可覆盖的虚拟函数来实现:classInterface{public:intcompute(){returncompute_impl();}private:virtualintcompute_impl()=0;protected:virtual~Interface()

c++ - 提供 protected 模板成员函数的公共(public)特化

我想做以下事情:classFoo{protected:templatevoidoperator()(constParam¶m){//stuffinvolvingsomeRTTImagic}public:voidoperator()(constA¶m)shouldbeoperator();voidoperator()(constB¶m)shouldbeoperator();}基本上,我有一个带有通用模板参数的通用operator()。但是,我只想发布类型安全的特定专业。谢谢! 最佳答案 只是给私有(privat

c++ - 为什么继承的 protected operator=() 具有公共(public)访问权限

声明为protected的重载运算符=对于继承父类作为public的子类是公开可访问的。#includeclassA{public:A(charc):i(c){}chari;protected:A&operator=(constA&rdm){std::cout编译时没有错误:$g++-Wall-otest_operator~/test_operator.cpp$./test_operatora.i==aaccessingoperator=()a.i==x直接使用A是编译不过的。operator=()以外的任何其他运算符重载都不会编译。使用g++4.4.7和7.3.0以及c++98和c+

c++ - 来自 Voronoi 的 Delaunay boost : missing triangle with non-integral point coordinates

遵循这两个资源:BoostbasictutorialSOQuestion我用boost写了一个Delaunay三角剖分。如果点坐标是完整的(我生成了几个随机测试并且我没有观察到错误),它工作正常。但是,如果这些点不是整数,我会发现许多不正确的三角剖分缺少边缘或错误的边缘。例如这张图片是用四舍五入的值构建的并且是正确的(见下面的代码)但是这个图像是用原始值构建的并且是不正确的(见下面的代码)这段代码重现了这两个例子(没有显示)。#includeusingboost::polygon::voronoi_builder;usingboost::polygon::voronoi_diagram

c++ - "Socket operation on non-socket"错误由于奇怪的语法

我在调用connect时在我的一些网络代码中遇到错误Socketoperationonnon-socket并花了很多时间试图找出导致的原因它。我终于发现是以下代码行导致了问题:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol)看到问题了吗?该行应该如下所示:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol))我不明白的是为什么第一行不正确的行没有产生警告。换句话说,一般形式不应该:if(foo=bar()编译器看起来很奇怪,尤其是使

C++:允许访问 protected 类成员而不是私有(private)成员

我知道您可以通过继承来做到这一点,但您应该在"is"情况下使用继承。我也知道有friend,但他们也允许访问私有(private)成员。有什么方法可以做到这一点(允许访问protected类成员而不是私有(private)成员)?为了改写这个问题,我有第1类和第2类。我希望第2类可以访问第1类的protected和公共(public)成员,但不能访问它的私有(private)成员。我该怎么做? 最佳答案 它并不优雅,但这可能适合你:classB;classA{protected:intx;private:inty;};classA_