注意:我知道有很多问题可以讨论,但我仍然是初学者,我无法理解这些例子.
我有一个函数原型,如下所示:
int someFunction(const char * sm);
Run Code Online (Sandbox Code Playgroud)
在这里,正如您所知,const char*表示此函数可以接受const或非const指针到char.我在函数体中尝试了类似的东西:
someMemberVar = sm;
Run Code Online (Sandbox Code Playgroud)
someMemberVar只是一个指向char的指针.编译器给我一个错误告诉我:无法从const char*转换为char*.
在这里,我没有传递常量,因此sm或someMemberVar不是常量.那么,编译器正在讨论什么常量?
dir*_*tly 11
我会尝试简单地说出其他人说的话:
该函数someFunction采用只读字符串(为简单起见,尽管char *可以在其他情况下使用).无论是否传入readonly字符串someFunction,该参数在此函数的上下文中执行的代码都被视为只读.因此,在此函数中,编译器将尽可能地阻止您写入此字符串.非const指针是这样一种尝试忽略对字符串和编译器的只读标记,正确而大声地通知你对它的类型系统的这种忽视;)
有什么区别:int someFunction(const char*sm)const {...}和this:int someFunction(const char*sm){...}
第一个是一个带有readonly参数的函数.const在右括号后写的第二个仅对成员函数有效.它不仅需要一个只读参数,还需要保证不改变对象的状态.这通常称为设计级别const.
Pav*_*aev 10
你的问题并不完全清楚,我怀疑你提供的错误文本实际上是错误的,实际上是:
无法转换
const char*为char*
既然你说的那样
someMemberVar只是一个指向char的指针.
这是有道理的.请记住,const char*它实际上是相同的char const*- 也就是说,它是指向const char的指针,而不是指向char的const指针!你可以一个指针不能转换为T const一个指针T,因为中断类型安全.考虑:
const char* a = "abc";
char* b = a; // what you're trying to do
b[0] = 'x'; // if you could do it, you could change const data without casts
Run Code Online (Sandbox Code Playgroud)
const char*是指向常量 char 的指针:
const char* ptr0; // ptr0 is mutable, *ptr0 is const
char* const ptr1; // ptr1 is const, *ptr1 is mutable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26225 次 |
| 最近记录: |