问题标签 [const-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2142 浏览

c++ - 不使用指针遍历 C 样式数组

我正在学习指针算术,并且有一段代码给了我很长一段时间的错误。任何帮助将不胜感激。(我在 SO 上找不到它)

我无法理解我在代码块中遇到的错误。我得到这个声明。

在这段代码中,我必须在不取消引用或使用 [] 运算符的情况下迭代数组。

0 投票
2 回答
322 浏览

c++ - 从函数返回常量字符指针

意味着getName()返回一个指向常量字符的常量指针?由于该函数是常量,因此它不会修改其任何参数。

0 投票
3 回答
110 浏览

java - 如何在 Java 中重现 const 指针的行为?

我有一个包含一堆控制数据的单例类,这些控制数据需要与我的应用程序的其余部分保持同步。结果,很多时候我希望另一个类能够读取信息但不能修改它。目前,这个单例类有很多公共变量。我不想使用 getter 和 setter 函数,因为它们冗长且烦人。此外,还有很多变数。

如果我的单例类称为 ControlData,我可以创建第二个创建第二个名为 ImmutableControlData 的类,它具有所有相同的成员,但它们被声明为 final。然后,在检索我的单例时,我将返回一个 ImmutableControlData,而不是一个 ControlData 对象。但是,这意味着我需要不断维护 ImmutableControlData 类以及 ControlData 类(烦人...)

如果我有 const 指针,我只会返回一个指向我的 ControlData 对象的 const 指针。相反,我可以用 Java 做什么?

0 投票
2 回答
394 浏览

c++ - 在模板 C++ 类中初始化 const 的 const 数组

我想创建一个template <typename T> class InitConst其中一些成员是T. 我想在类的对象初始化期间填充这些数组,然后确保这些数组不会再改变,所以我const T* const v为每个这样的数组定义了一个成员(我知道第一个 const 是指元素,第二个是指针)。

对此进行试验使我得出结论,将“v”定义为“指向 const 的 const 指针”迫使我在最终用该数组的地址初始化“v”之前分配并填充相应的数组。此外,由于我无法在“InitConst”类的构造函数体内初始化“v”,因此我得出结论,我需要一个辅助函数,其作用是(a)获取构造函数参数,(b)分配和填充数组, 和 (c) 使用一些静态指针来保存这些数组的地址。这些静态指针最终会被构造函数用来初始化 const 指针,所以我得到了这样的代码:

这段代码按预期编译和工作,但我认为这个设计是扭曲的:我习惯于简单的代码,我首先分配一个数组,然后计算它的元素(这两件事通常发生在构造函数的主体中),然后使用数组。相比之下,构造函数本身几乎什么都不做:它的角色被转移到方法“init”,它实际上创建了数组并使用一些辅助指针将它们传递回构造函数。

然后我想知道:

a) 如果我决定将每个指针声明为“指向 const 的 const 指针”,这种设计(或类似的东西)是否必要,或者有更简洁的方法来做到这一点?

b) 将每个指针声明为“指向 const 的 const 指针”是一种防止滥用类的方法,但也许我不需要那么多。一种不太严格的方法是将“v1”及其兄弟姐妹声明为私有成员,以便不能从类外部更改它们。但是,这样做也会阻止从类外部读取它们,并且我不希望每个数组“vx”都有一个“read_vx”方法。然后我能做些什么,也就是说,什么方法会导致代码更具可读性,并且至少仍然保证不能从类外部更改数组?

在此先感谢,并为冗长的散文感到抱歉。

编辑:正如我在下面评论的那样,在我的真实代码中,我想要计算的各种数组一起计算的效率要高得多,这就是我使用单个“init”函数的原因。我在示例中提供的“init”(“a1”、“a2”、“a3”)的参数实际上具有误导性。

0 投票
2 回答
989 浏览

c++ - const 引用和 const 指针上的 new-expression 和 delete-expression

C++

许多文献说const引用不能用来修改它们的所指对象,const指针不能用来修改它们的指针。

那么,为什么他们可以是deleted?

我知道后面的 const inT* const只会防止指针被重新定位,但在下面我使用两个consts,如 in const T* const,以强调。为什么后面的指针可以是deleted?

输出显示至少有一些动态分配的内存被释放。是否所有这些都被释放了,或者在只有副本被释放的情况下是否存在复制?

const 引用片段 ( int&) 的非 const 版本和 const 指针 const 片段 ( ) 的非前导 const 版本int* const ) 的非 const 版本和 const 指针 const 片段 ( andint*产生与其更多 const 对应物相同的输出。在所有 5 种情况下,为什么以及如何延长临时 new-expression 的生命周期?

如果数据类型是类或结构,则假设相应的运算符没有被重载、显式删除或设为非公共,标准是否做出以下保证:

  • 解引用运算符提供对指针对象的直接访问

  • new运算符生成指向动态分配内存的指针,而不是原始动态分配内存的动态分配副本

相反,如果new运算符重载但仍返回::operator new(size),而解引用运算符重载但仍返回对对象的引用,是否有任何副作用会使这两点不成立?

0 投票
3 回答
27790 浏览

c++ - 使用 malloc() 为 const char 字符串动态分配内存

我正在编写一个程序,它从 .ini 文件中读取一个值,然后将该值传递给一个接受 PCSTR(即 const char *)的函数。功能是getaddrinfo()

所以,我想写PCSTR ReadFromIni()。要返回一个常量字符串,我计划使用分配内存malloc()并将内存转换为常量字符串。我将能够获得从 .ini 文件中读取的确切字符数。

那个技术好吗?我真的不知道还能做什么。

以下示例在 Visual Studio 2013 中运行良好,并根据需要打印出“hello”。

0 投票
1 回答
997 浏览

swift - 如何在 Swift 中获取 CConstPointer?

我想用变换来变换一个 CGPath,CGAffineTransformMakeRotation(radians)CGPathCreateCopyByTransformingPath函数需要一个CConstPointer<CGAffineTransform>. 我怎样才能CConstPointer<CGAffineTransform>摆脱我的CGAffineTransform

0 投票
2 回答
858 浏览

c++ - c - 这个 2 const 是什么意思?

代码:

上面的指针中有 2 个 const,我第一次看到这样的东西。

我知道第一个 const 使指针指向的值不可变,但是第二个 const 是否使指针本身不可变?

任何人都可以帮助解释这一点吗?


@更新:

我写了一个程序来证明答案是正确的。

取消注释 3 个函数中的行,将得到带有提示的编译错误。

0 投票
5 回答
1952 浏览

c++ - C++ 中 this* 的类型

听起来可能很愚蠢。在 C++prime 第 5 版 P258 中,它说:

默认情况下,this 的类型是指向类类型的非常量版本的 const 指针。例如,默认情况下,Sales_data 成员函数中 this 的类型是 Sales_data *const。

我可以理解,对于 this* 是一个 const 指针,这意味着它指向的对象一旦初始化就不能改变。但是它说:

虽然这是隐含的,但它遵循正常的初始化规则,这意味着(默认情况下)我们不能将它绑定到 const 对象。

但我写了以下代码,它仍然编译得很好:

所以我的问题是:如果编译器可以很好地编译它,无论是否有'const',这有什么关系?然后书上说:

毕竟,isbn 的主体不会改变 this 指向的对象,所以如果 this 是指向 const 的指针,我们的函数会更加灵活。

我想知道灵活性是什么?你能给我看一些例子吗?

0 投票
1 回答
45 浏览

c++ - 什么场景可能需要使用\需要指向(非const\const)数据的const指针

我理解final在 Java 或constC++ 中强制常量值并允许编译器对使用您编写的模块的任何人强制执行该值的概念。

我无法看到您希望在哪里有一个const指针,为什么您不希望指针改变而不管数据是否恒定:

例如

为什么这个?

我无法想象一个你想保留指针常量的例子,它可能是一个文件句柄或类似的东西吗?还是只是指向您不想更改的对象的指针?