标签:style blog color ar 使用 sp div on log
const char*用于定义一个指向常量字符串的指针,通常形式为:
const char* ptr = "hello";
但可能很多粗心的朋友们没有注意到下面一种定义:
const char* ptr2 = "hello";
ptr和ptr2指向的是同一片内存,即定义const char* ptr = "hello"并不等于创建新的常量字符串,而是试图返回一个常量字符串的访问地址,如果常量字符串不存在就创建常量字符串并返回常量字符串的地址,这种说法并不全对。
const char*是一个指针,和常量字符串的获取和创建没有关系,访问和创建常量字符串是"hello"完成的,没错啦,是通过"hello"访问的常量字符串"hello",你随时随地可以通过"hello"获取指向"hello"的指针,"hello"在第一次被使用到的时候被创建,以后使用"hello"都是访问这块地址。
比如下面的例子:
通过return的方式返回字符串常量,可以代替某些函数的static变量,很酷吧。
g++的bug
g++在处理常量字符串类型的返回值时存在bug,上面例子返回的是const char*,也是众所周知的安全访问字符串常量方式,但你也可以定义返回值类型为char*,是的,你可以定义为char*,并用一个char*的指针来接收它,突破了不能将const char*赋值给char*的限制,你做到了,你的码危险了,你修改常量字符串的时候就core了。
这个bug你值得尝试,却不必拥有。
标签:style blog color ar 使用 sp div on log
原文地址:http://www.cnblogs.com/learn-my-life/p/4071181.html