首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Const char ...改变了吗?

是的,const char * 改变了。在 C++11 及以后的版本中,const char * 被重命名为 const char[],而在 C++17 中,它又被进一步重命名为 constexpr char[]。这种变化的原因是为了提高代码的可读性和可维护性,以及解决 const char * 在某些编译器中可能出现的类型推导问题。

在 C++11 之前,const char * 指向的是一个字符指针,它指向一个字符常量。在 C++11 中,为了提高代码的可读性和可维护性,const char * 被重命名为 const char[],这意味着它现在是一个指向字符常量的指针,而不是指向一个字符指针。在 C++17 中,为了进一步提高代码的可读性和可维护性,const char[] 被进一步重命名为 constexpr char[]

总的来说,这种变化意味着 const char * 已经被 constexpr char[] 取代,const char * 已经被视为过时,应该尽量避免使用。

constexpr char[] 的优点是它提高了代码的可读性和可维护性,同时也可以避免一些编译器在类型推导时可能出现的问题。它也可以用于在编译时生成字符串常量,这对于生成随机字符串等非常有用。

总的来说,const char[] 的出现大大提高了代码的可读性和可维护性,同时也提供了一些新的功能,这使得它成为现代 C++ 编程中不可或缺的一部分。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

怎么理解int main(int argc, const char *argv[])

每次创建一个程序总会看到已经编写好的Hello World程序(如下代码 0-1): // 代码 0-1 #include int main(int argc, const char...\n"); return 0; } 为什么自己编写的时候没有”int argc, const char *argv[]”,运行结果也是一样的呢?...这是不是意味着参数”int argc, const char *argv[]”没有任何作用呢?接下来逐步分析: (1)是不是真的没有作用呢?怎样排除特殊性呢?...实践是检验真理的唯一标准,运行看看,结果:1606422582、0,这两个数完全不符合猜想,因此:int main(int argc, const char *argv[])中的参数是有作用的 为什么运行结果不一样呢...// 代码 2-3-2 #include int main(int argc, const char *argv[]) { printf("argc = %d\n", argc

1.9K31

【错误记录】C++ 字符串常量参数报错 ( 无法将参数 1 从“const char ”转换为“char *” | 从字符串文本转换将丢失 const 限定符 )

*)”: 无法将参数 1 从“const char [6]”转换为“char *” Test.cpp(12,6): message : 从字符串文本转换将丢失 const 限定符(请参阅 /Zc:strictStrings...*)”: 无法将参数 1 从“const char [6]”转换为“char *” 1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\Test.cpp...* 类型的字符串 , 那么就传入 char* 类型的实参 , 不要传入 const char* 类型的字符串 ; 将 “Hello” 字符串常量 , 强制转为 char* 类型 , 如下代码示例 : fun...void fun(char* str) { cout << str << endl; } int main() { fun(const_cast("Hello")); //...控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; }; 执行成功 : 5、修改形参类型 将 函数中的 char* 类型的形参 , 修改为 const char

50010

c++学习之析构函数和const总结,你真的掌握了吗

(2)代码演示: #include class Test { const char * i; public: Test(const char *s) {...printf("Test(const char *s) is %s\n",s); i=s; } ~Test() {...char *s) is gA Test(const char *s) is mA Test(const char *s) is mB Test2() ~Test2() ~Test() is mB...const修饰的对象特性: const修饰的对象为只读对象 只读对象的成员变量不允许被改变 只读对象是编译阶段的概念,运行时无效 代码示例: #include class Test...从面向对象的角度看,对象由属性(成员变量)和方法(成员函数)构成 从程序运行的角度来看,对象由数据和函数构成,而数据可以位于栈、堆、全局数据区;而函数只能位于代码段,而代码段是只读的,在程序运行过程中是不可以被改变

20450

C++中四种类型转换以及const_cast是否能改变常量的问题

) const_cast一般用于指针或者引用 使用const_cast去除const限定的目的不是为了修改它的内容 使用const_cast去除const限定,通常是为了函数能够接受这个实际参数...int i; char *p = "This is a example."; i = reinterpret_cast(p); //此时结果,i与p的值是完全相同的。...int *ip char *pc = reinterpret_cast(ip); // 程序员需要记得pc所指向的真实对象是int型,并非字符串。...二、也许大家都有过这样的疑惑:const_cast可以去除一个常量的const属性,去除const属性后应该可以对“常量”进行修改,通过调试器发现内存中的值是被改变的,可是再传递这个“常量”的时候,值却一直保持原状...const_cast operator The const_cast operator can be used to remove the const, volatile, and __unaligned

1.3K100

【Linux】开始学习进程替换吧!

,char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char...*const argv[]); int execve(const char *filename, char *const argv[],char* const envp[]); 我们来进行一下使用,来看看...调用exec并不创建新进程,所以调用exec前后该进程的id并未改变 没有创建新进程!!!...我们知道 进程 = 内核数据结构 + 代码和数据 ,替换就是用新进程的代码与数据替换之前的代码与数据,注意不改变pid哦! 站在被替换进程的角度:本质就是这个程序别加载到内存里了!!!...我们接着向下看 2.3 单进程改为多进程 方法很简单,我们通过fork函数创建一个子进程,让子进程来执行我们的新程序不就可以了吗

7210

C++强制类型转换操作符 const_cast

(volatile限定符也包括,不过我不怎么了解,本文主要说const) 对于第一点,转换掉表达式的const性质,意思是可以改变const对象的值了吗?...如果我们定义了一个非const的变量,却使用了一个指向const值的指针来指向它(这不是没事找事嘛),在程序的某处我们想改变这个变量的值了,但手头只持有指针,这是const_cast就可以用到了: int...modifier<<endl; system("pause"); }  总结一下上文:const_cast绝对不是为了改变const变量的值而设计的!...For example, if you have a function that takes a parameter of a const char *, and you pass in a modifiable...char *, it's safe to const_cast that parameter back to a char * and modify it.

26440
领券