Tag: const

删除指向const(T const *)的指针

我有一个关于const指针的基本问题。 我不允许使用const指针调用任何非const成员函数。 不过,我可以在const指针上做这个: delete p; 这将调用类的析构函数,实质上是非常量的“方法”。 为什么这是允许的? 仅仅是为了支持这个: delete this; 还是有其他原因?

一个constvariables可以用来声明C中数组的大小吗?

为什么下面的代码会抛出一个错误? const int a = 5; int b[a]={1,2,3,4,5}; 而且当我试图编译上面的代码没有“const”关键字时,我得到了同样的错误: int a = 5; int b[a]={1,2,3,4,5}; 为什么这样呢? 我在这里做的错误是什么? 还有另一个问题:什么时候将常量replace为代码中的实际值,即如果我声明一个variables说:const int x = 5; 我知道RAM中没有为variablesx分配内存,但是在ROM中的常量variables区域保存了值5,并且在代码中出现x的地方x简单地由值5代替。 但是这是什么时候发生的? 编译时间? 开机时间? 预处理时间? PS:我正在谈论embedded式C(运行在微控制器等),而不是C在我的桌面上运行。 所以embedded式系统必然有一个ROM(Flash,EEPROM …)。 那么会发生什么?

如何在构造函数中初始化一个常量字段?

想象一下,我有一个C ++类Foo和一个类Bar,必须使用构造函数创build一个Foo指针,并且该指针在Bar实例生命周期中保持不变。 什么是正确的做法呢? 事实上,我以为我可以写下面的代码,但它不编译.. class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; }; 任何build议是值得欢迎的。

C#命名常量的常量?

private const int THE_ANSWER = 42; 要么 private const int theAnswer = 42; 就个人而言,我认为与现代的IDE,我们应该去骆驼,因为ALL_CAPS看起来很奇怪。 你怎么看?

C ++ Const使用说明

const int* const Method3(const int* const&) const; 有人可以解释每个常量的用法吗?

如何在类中初始化const成员variables?

#include <iostream> using namespace std; class T1 { const int t = 100; public: T1() { cout << "T1 constructor: " << t << endl; } }; 当我试图用100初始化const成员variablest ,但它给了我以下错误: test.cpp:21: error: ISO C++ forbids initialization of member 't' test.cpp:21: error: making 't' static 我怎样才能初始化一个const值?

优雅的解决scheme,复制,const和非const,getters?

你有没有讨厌它 class Foobar { public: Something& getSomething(int index) { // big, non-trivial chunk of code… return something; } const Something& getSomething(int index) const { // big, non-trivial chunk of code… return something; } } 我们不能用另一个实现这个方法,因为你不能从const版本中调用非const的版本(编译器错误)。 需要const非const 。 有没有一个真正优雅的解决scheme,如果没有,最接近的是什么?

函数声明结尾的“const”是什么意思?

可能重复: C ++方法声明中最后一个“const”的含义? 嗨,我有一本书,写有这样的东西: class Foo { public: int Bar(int random_arg) const { // code } }; 此外,一个顺便问题:为什么我应该/不应该在参数声明之前使用const ? 这个改变是什么? int Foo (const int Bar) { /* code */ } 编辑:所以,如果我现在做: Foo v1, v2; (const标记的)Bar函数会在内存中存在3次还是1次?

带有const参数和重载的函数

尝试了stackeroverflow qn所以它让我思考为什么不重载的function,我想出了一个稍微不同的代码,但它说,该function不能超载。 我的问题是为什么? 还是有另一种方式? #include <iostream> using std::cout; class Test { public: Test(){ } int foo (const int) const; int foo (int ); }; int main () { Test obj; Test const obj1; int variable=0; do{ obj.foo(3); // Call the const function obj.foo(variable); // Want to make it call the non const function variable++; usleep […]

为什么我不能在C中将'char **'转换为'const char * const *'?

下面的代码片段(正确)给出了C中的警告和C ++中的错误(分别使用gcc&g ++,在版本3.4.5和4.2.1中testing; MSVC似乎不在乎): char **a; const char** b = a; 我可以理解并接受这一点。 这个问题的C ++解决scheme是将b改为const char * const *,它不允许重新分配指针,并且阻止你规避const正确性( C ++ FAQ )。 char **a; const char* const* b = a; 但是,在纯C中,修正后的版本(使用const char * const *)仍然会给出警告,我不明白为什么。 有没有办法解决这个问题,而不使用一个演员? 澄清: 1)为什么这会在C中产生警告? 它应该完全是常量安全的,C ++编译器似乎也是这样认识的。 2)接受这个char **作为参数的正确方法是什么?在说(并且让编译器强制执行)的时候我不会修改它指向的字符? 例如,如果我想写一个函数: void f(const char* const* in) { // Only reads the data from […]