Tag: const

char *和const char *之间的区别?

有什么区别 char* name 它指向一个常量string,和 const char* name

Const参数的正确性

我知道关于const正确性的问题很less,在这里,声明函数及其定义不需要同意价值参数。 这是因为值参数的常量只在函数内部起作用。 这可以: // header int func(int i); // cpp int func(const int i) { return i; } 这是否是一个最好的做法? 因为我从来没有见过任何人这样做。 我已经在其他地方看到了这个引用(不知道源代码) “实际上,对于编译器来说,无论您是否将此const包含在值参数前面,函数签名都是相同的。” “在函数声明中避免使用const传值参数,如果参数不被修改,仍然将参数设置为const在同一个函数的定义中。 第二段说不把const放在声明中。 我认为这是因为作为接口定义的一部分,值参数的常量是没有意义的。 这是一个实现细节。 基于这个build议,是否也推荐指针参数的指针值? (由于不能重新分配引用,因此对引用参数没有意义。) // header int func1(int* i); int func2(int* i); // cpp int func1(int* i) { int x = 0; *i = 3; // compiles without error i = […]

为什么“extern const int n”不能按预期工作?

我的项目只包含两个源文件: a.cpp: const int n = 8; b.cpp: extern const int n; int main() { // error LNK2001: unresolved external symbol "int const n" (?n@@3HB) int m = n; } 我知道有几种方法可以使其工作。 但是,我只是想知道为什么它不起作用?

这里不是const修饰符吗?

“ 有效的C ++ ”第3项说“尽可能使用常量”,它给出了一个例子: const Rational operator*(const Rational& lhs, const Rational& rhs); 防止客户犯下这样的暴行: Rational a, b, c; … (a * b) = c; // invoke operator= on the result of a*b! 但不是函数的非参考返回值已经是右值 ? 那么为什么要这样做呢?

为什么不是STL映射的运算符常量?

举个例子,为了这个问题: void MyClass::MyFunction( int x ) const { std::cout << m_map[x] << std::endl } 这将不会编译,因为[]运算符是非常量。 这是不幸的,因为[]语法看起来很干净。 相反,我必须做这样的事情: void MyClass::MyFunction( int x ) const { MyMap iter = m_map.find(x); std::cout << iter->second << std::endl } 这一直困扰着我。 为什么[]运算符是非常量?

在C中,可以通过一个指针修改一个constvariables?

我在代码中写了一些类似的东西 const int x=1; int *ptr; ptr = &x; *ptr = 2; 这是否适用于所有编译器? 为什么GCC编译器没有注意到我们正在改变一个常量variables?

typedef指针常量古怪

请考虑下面的代码: typedef struct Person* PersonRef; struct Person { int age; }; const PersonRef person = NULL; void changePerson(PersonRef newPerson) { person = newPerson; } 出于某种原因,编译器正在关于只读值不可分配。 但const关键字不应该使指针为const。 有任何想法吗?

是sizeof(枚举)== sizeof(int),总是?

是sizeof(枚举)== sizeof(int),总是? 还是编译器依赖? 是不是说错了,因为编译器是针对字长(内存alignment)进行优化的,即y int是特定编译器的字大小? 这是否意味着如果我使用枚举就没有处理惩罚,因为它们是字alignment的? 如果我把所有的返回代码放在一个枚举中,不是更好,因为我显然不担心它的值,只检查返回types的名字。 如果是这种情况,#DEFINE会更好,因为它可以节省内存。 通常的做法是什么? 如果我必须通过networking传输这些返回types,并且必须在另一端执行一些处理,那么您希望枚举/#define / const ints是什么。 编辑 – 只要在网上检查,作为编译器不象征性地链接macros,那么人们如何debugging,比较整数值与头文件? 从答案 – 我在下面添加这一行,因为我需要澄清 – “所以它是实现定义的,sizeof(枚举) 可能等于sizeof(char),即1。 这不是说编译器检查枚举值的范围,然后分配内存。 我不这么认为,当然我不知道。 有人可以解释我什么是“可能”。

返回临时对象并绑定到const引用

可能重复: const引用是否延长了临时的生命? 我的编译器不抱怨将临时指派给const引用: string foo() { return string("123"); }; int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; } 为什么? 我认为从foo返回的string是临时的,val可以指向哪个对象的生命周期已经完成。 C ++标准是否允许这个并延长返回对象的生命周期?

通过非const指针修改一个const

我有点困惑以下代码发生了什么事情: const int e = 2; int* w = ( int* ) &e; // (1) cast to remove const-ness *w = 5; // (2) cout << *w << endl; // (3) outputs 5 cout << e << endl; // (4) outputs 2 cout << "w = " << w << endl; // (5) w points […]