Questions tagged «const»

编程中的常量是定义,其值在程序执行期间是固定的。例如,大多数语言中的文字都是常量。在引用透明的编程样式中,所有定义都是常量。const限定的数据存储区(对象,字段,变量,参数)是“永不改变”的区域,因此可以进行额外的代码生成器优化和对程序正确性的额外静态检查。


9
如何在某些平台上可移植地调用一个采用char **且在其他平台上采用const char **的C ++函数?
在我的Linux(和OS X)计算机上,该iconv()函数具有以下原型: size_t iconv (iconv_t, char **inbuf... 在FreeBSD上,它看起来像这样: size_t iconv (iconv_t, const char **inbuf... 我希望我的C ++代码可以在两个平台上构建。对于C编译器,传递char**for const char**参数(反之亦然)通常仅发出警告;反之亦然。但是在C ++中,这是一个致命错误。因此,如果传递a char**,它将无法在BSD上进行编译,如果传递a const char**,则将无法在Linux / OS X上进行编译。如何在不借助检测平台的情况下编写可在两者上进行编译的代码? 我的一个(失败)想法是提供一个本地原型,该原型将覆盖标头提供的任何原型: void myfunc(void) { size_t iconv (iconv_t, char **inbuf); iconv(foo, ptr); } 这失败,因为iconv需要C链接,并且您不能放入extern "C"函数中(为什么不这样?) 我想出的最佳工作思路是强制转换函数指针本身: typedef void (*func_t)(iconv_t, const char **); ((func_t)(iconv))(foo, ptr); 但这有可能掩盖其他更严重的错误。
91 c++  const  portability 

5
删除指向const的指针(T const *)
我有一个关于const指针的基本问题。我不允许使用const指针调用任何非const成员函数。但是,我可以在const指针上执行此操作: delete p; 这将称为本质上是非常量“方法”的类的析构函数。为什么允许这样做?只是为了支持这一点: delete this; 还是还有其他原因?

6
为什么STL映射不使用[]运算符const?
为了这个问题,有人为的例子: 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 } 这一直困扰着我。为什么[]运算符是非常量的?
89 c++  const 

6
为什么在C ++中引用不是“ const”?
我们知道,“常量变量”表示一旦分配,就不能更改该变量,如下所示: int const i = 1; i = 2; 上面的程序无法编译;gcc提示错误: assignment of read-only variable 'i' 没问题,我可以理解,但是以下示例超出了我的理解范围: #include<iostream> using namespace std; int main() { boolalpha(cout); int const i = 1; cout << is_const<decltype(i)>::value << endl; int const &ri = i; cout << is_const<decltype(ri)>::value << endl; return 0; } 它输出 true false …

4
为什么const成员函数可以修改静态数据成员?
在以下C++程序中,从函数修改静态数据成员const可以正常工作: class A { public: static int a; // static data member void set() const { a = 10; } }; 但是从函数修改非静态数据成员const不起作用: class A { public: int a; // non-static data member void set() const { a = 10; } }; 为什么const成员函数可以修改static数据成员?
86 c++  function  c++11  static  const 

5
关键字“ const”不会使值不变。这是什么意思?
Axel Rauschmayer博士在探索ES6中有const定义: const就像let一样工作,但是您声明的变量必须立即初始化,并且其值以后不能更改。[…] const bar = 123; bar = 456; // TypeError: `bar` is read-only 然后他写道 陷阱:const不会使值不变 const 仅表示变量始终具有相同的值,但并不表示该值本身是不变的。 我对此陷阱感到困惑。有人可以const用这个陷阱清楚地定义吗?

6
在文件范围内可变地修改数组
我想创建一个恒定的静态数组,以便在我的Objective-C实现文件中使用,类似于在“ .m”文件的顶层进行如下操作: static const int NUM_TYPES = 4; static int types[NUM_TYPES] = { 1, 2, 3, 4 }; 我计划NUM_TYPES稍后在文件中使用它,因此我想将其放入变量中。 但是,当我这样做时,我得到了错误 “文件范围内的可变修改的'类型'” 我认为这可能与数组大小是变量有关(当我在其中放置整数文字时,我没有得到此消息static int types[4])。 我想解决这个问题,但也许我会做错所有事情……我在这里有2个目标: 具有整个文件可访问的数组 封装NUM_TYPES到变量中,这样我就不会在文件的不同位置散布相同的文字 有什么建议么? [编辑]在C常见问题解答中发现了此问题:http : //c-faq.com/ansi/constasconst.html

9
参数可以恒定吗?
我正在寻找与Java等效的C#final。是否存在? C#是否具有以下内容: public Foo(final int bar); 在上面的示例中,bar是只读变量,不能通过进行更改Foo()。在C#中有什么方法可以做到这一点? 比如,也许我还有很长的方法,将与其合作x,y和z一些对象(整数)的坐标。我想绝对确定该函数不会以任何方式更改这些值,从而损坏数据。因此,我想将它们声明为只读。 public Foo(int x, int y, int z) { // do stuff x++; // oops. This corrupts the data. Can this be caught at compile time? // do more stuff, assuming x is still the original value. }

4
const auto有什么意思吗?
我认为问题很明确。将auto关键字自动检测常量性,或总是返回一个非const类型,即使有如。函数的两个版本(一个返回const,另一个不返回)。 仅作记录,我确实const auto end = some_container.end()在for循环之前使用过,但我不知道这是否有必要甚至与normal不同auto。
82 c++  c++11  const 

6
#define vs const in Objective-C
我是Objective-C的新手,并且关于const和预处理指令还有一些问题#define。 首先,我发现无法使用定义常量的类型#define。这是为什么? 其次,使用其中一个相对于另一个有什么优势吗? 最后,哪种方法更有效和/或更安全?

3
使用一个函数调用C ++初始化多个常量类成员
如果我有两个不同的常量成员变量,都需要基于相同的函数调用进行初始化,是否有一种方法可以在不两次调用函数的情况下进行? 例如,分数类,其中分子和分母是常数。 int gcd(int a, int b); // Greatest Common Divisor class Fraction { public: // Lets say we want to initialize to a reduced fraction Fraction(int a, int b) : numerator(a/gcd(a,b)), denominator(b/gcd(a,b)) { } private: const int numerator, denominator; }; 由于两次调用GCD函数,这会浪费时间。您还可以定义一个新的类成员,gcd_a_b然后首先将gcd的输出分配给初始化程序列表中的输出,但这将导致内存浪费。 通常,有没有一种方法可以避免浪费的函数调用或内存?您能否在初始化列表中创建临时变量?谢谢。

4
为什么C中的绝对值函数不接受const输入?
在C语言中,绝对值函数(接受浮点数)的原型为 float fabsf( float ); 为什么这个原型不接受一个常量值,像这样: float fabsf( float const ); fabsf不会更改输入的值,对吗? 如果我有一个接受输入并调用fabsf的函数,我是否被迫避免将输入指定为const? 在这种情况下,处理const正确性的适当方法是什么?

1
不是复制或克隆的全局const在Rust中如何工作?
说我有以下片段(游乐场) struct A { pub val: u32 } const GLOBAL_A: A = A {val: 2}; fn main() { let some_a: A = GLOBAL_A; let other_a: A = GLOBAL_A; println!("double val = {}", some_a.val + other_a.val); } 由于A既不是也不Clone是Copy,我假设的值GLOBAL_A将被移动。这对于const来说没有多大意义,而且无论如何也无法显示,因为它可以被“移动”两次。 允许以上代码片段起作用的规则A是什么Clone也不是Copy?
20 rust  const  move 

3
具有非常量指针和相同地址的const参数的指针的函数调用
我想编写一个函数,该函数输入一个数据数组并使用指针输出另一个数据数组。 我想知道如果两者都指向同一地址会产生什么结果src,dst因为我知道编译器可以针对const进行优化。它是未定义的行为吗?(我同时标记了C和C ++,因为我不确定答案是否可能会有所不同,并且我想了解两者。) void f(const char *src, char *dst) { dst[2] = src[0]; dst[1] = src[1]; dst[0] = src[2]; } int main() { char s[] = "123"; f(s,s); printf("%s\n", s); return 0; } 除了上述问题,如果删除const原始代码中的,是否定义明确?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.