草庐IT

Constants

全部标签

c++ - 从 const 类继承

我想从一个带有const说明符的类继承,如下所示:classProperty{intget()const;voidset(inta);};classConstChild:publicconstProperty{//CannevercallA::set()withthisclass,evenif//theinstantiationofthisclassisnotconst};classNonConstChild:publicProperty{//CancallbothA::set()andA::get()dependingon//theconstnessofinstantiationof

c++ - 函数指针的模板参数推导(g++ & ICC vs Clang++ & VC++)

考虑以下程序:#includetemplatevoidfoo(constT*x){x();}voidbar(){std::cout它在clang++和VC++上编译良好,但g++给出以下编译器错误(参见现场演示here)main.cpp:Infunction'intmain()':main.cpp:10:9:error:nomatchingfunctionforcallto'foo(void(&)())'foo(bar);^main.cpp:3:6:note:candidate:templatevoidfoo(constT*)voidfoo(constT*x){^~~main.cpp:

c++ - 不断结合优化编译器

我有一个包含很多小内联函数的头文件。他们中的大多数恰好有常量数据。由于这些函数对性能至关重要,因此它们处理常量的方式变得很重要。据我所知,有两种方法可以引用常量:1)在稍后与应用程序链接的单独源文件中定义它们。2)就地定义常量。我会选择后一种方式,因为它更易于维护。但是,如果编译器不优化通过内联创建的数千个相等常量,它可能会变慢。问题:编译器会合并这些相等的常量吗?具体而言,将使用以下哪些方法?1)跨编译单元组合相等常量。2)跨链接模块(整个程序或库)组合相等常量3)将常量与碰巧具有相同位模式并满足编译单元或整个程序对齐要求的任何静态常量数据组合。我使用现代编译器(GCC4.5)。我不

c++ - 检查/修改迭代器 "constness"

我有两个半密切相关的问题。给定一个作为模板参数传递的STL迭代器类型:如何判断类型对应的是常量迭代器还是非常量迭代器?替代1.,如何强制(例如使用enable_if)此类型对应于非常量迭代器?如何从非常量迭代器获取迭代器的const-版本(反之亦然)?[注意:已在thispost中回答;毫不奇怪,你不能。]这个问题来自哪里:我写了一个小类来促进vector上的算术/关系/代数运算(vector我的意思是一维固定大小的数据,而不是STLvector)。我没有强加一个特定的数据容器,而是定义了一个接口(interface)并派生了几个可能的容器,这些容器基本上“包装”了各种存储数据的方式。

c++ - 有没有办法告诉 openmp 共享数据是不变的?

我猜测即使从openmp中的共享数据读取也会导致一些并行开销,因为取决于处理器架构(如果不同的内核有自己的缓存......)可能需要刷新缓存以确保没有其他cpu在读取之前修改了数据。我这样想对吗?如果是这样,有没有办法告诉openmp(在英特尔编译器fwiw上)一些共享数据是常量,因此不需要这样的缓存刷新?如果答案是c++const是否有一种简单的方法可以将非常量数据转换为const数据,而无需实际重新分配内存,一旦程序在运行时通过了某个点?更新啊,好的。我现在记得我的印象是const在这种情况下是一件好事:http://www.akkadia.org/drepper/cpumemor

C++ 常量问题

如果我这样做://InheaderclassFoo{voidfoo(bar*);};//IncppvoidFoo::foo(bar*constpBar){//Stuff}编译器不会提示Foo::foo的签名不匹配。但是,如果我有:voidfoo(constbar*);//InheadervoidFoo::foo(bar*){}//Incpp代码将无法编译。这是怎么回事?我正在使用gcc4.1.x 最佳答案 首先,您已向编译器promise,但不是该类的其他用户,您不会编辑该变量。在您的第二个示例中,您已向该类的其他用户promise

c++ - const_cast 是否会导致实际的代码排放?

const_cast真的只是告诉编译器“停止提示,将其视为非常量指针”的一种方式吗?有没有const_cast本身被翻译成实际机器代码的情况? 最佳答案 不,它只是在编译时删除了const属性。 关于c++-const_cast是否会导致实际的代码排放?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/759315/

c++ - const 引用临时异常

我们都知道像这样的事情在c++中是有效的:constT&x=T();同时:T&x=T();不是。在arecentquestion谈话导致这条规则。OP发布了一些明显让人联想到UB的代码。但我希望它的修改版本可以工作(这是修改版本):#includeusingnamespacestd;classA{public:A(intk){_k=k;};intget()const{return_k;};int_k;};classB{public:B(constA&a):_a(a){}voidb(){coutb();}这在一些机器上打印垃圾,在其他机器上打印10...对我来说听起来像UB:-)。但后来

c++ - 是否所有 C++ 编译器都允许使用 static const int 类成员变量作为数组绑定(bind)?

在VC++中,当我需要为类成员变量指定一个数组绑定(bind)时,我会这样做:classClass{private:staticconstintnumberOfColors=16;COLORREFcolors[numberOfColors];};(请不要告诉我这里使用std::vector)这样我就有了一个常量,可以用作数组绑定(bind),稍后在类代码中指定循环语句约束,同时它在其他任何地方都不可见。问题是staticconstint成员变量的这种用法是否只被VC++允许,还是通常被其他广泛使用的编译器允许? 最佳答案 这是有效的

c++ - 您对在方法内部声明常量的看法...?

Closed.Thisquestionisopinion-based。它当前不接受答案。想改善这个问题吗?更新问题,以便editingthispost用事实和引用来回答。1年前关闭。Improvethisquestion我所管理的团队中的开发人员更喜欢在测试中将变量声明为常量,例如constintsomeValue=1;(而不只是intsomeValue=1;)。当我看到此消息时,我发现它有点奇怪,并质疑他做了什么。他的论点是,对于此测试而言,这是明智的-因为他所分配的值永远不会改变。我一直认为常量是应该在类级别声明的东西。但是,我确实看到了该开发人员的观点。你怎么看?而且,撇开测试,