首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

"abc"的类型为什么不是const char*解决方案

2012-02-23 
abc的类型为什么不是const char*?C/C++ code#include iostreamusing namespace stdclass MyClass{pub

"abc"的类型为什么不是const char*?

C/C++ code
#include <iostream>using namespace std;class MyClass{public:    MyClass(const char* str)    {        cout << "const\n";    }    MyClass(char *str)    {        cout << "non-const\n";    }};main(){    MyClass obj("abc");    return 0;}


以上代码VC6下输出为:
non-const

为什么?

[解决办法]
history dramatic
[解决办法]
可能跟编译器有关,在VC7下面输出为const。不知道哪位能在linux下面跑跑看什么结果。
[解决办法]
"abc", 也就是常量字符串,在C/C++中它的类型是 const char [] ,也就是常量字符数组。
[解决办法]
验证过了,在FC7中是const,that make sense!
[解决办法]
风格不好,应该是:
int main()
^_^..
[解决办法]
vs2005是const,和编译器有关吧
[解决办法]
我在vs2008中结果是:const
前提是:int main()
如果是main()
则编译有一个错误..
[解决办法]
好像是和编译器有关
[解决办法]
VC6不知道是否是const,把MyClass(char* str)删了也能正常编译,结果就是const。
[解决办法]
反正几本讲解C++的权威书(《C++程序设计语言》《C++Primer》第三版)就说程序里的文字量形如"abc"的就是 const char [] 类型
[解决办法]
DEVC++ 下的结果也是 CONST 和编译器有关吧
[解决办法]
"abc" 就是const char[]类型 严格的说是char[3]类型!
[解决办法]
C的遗传问题。

[解决办法]
编译器相关,看定义的字符串是否为常量了
[解决办法]
MyClass obj("abc"); //调用的构造函数是MyClass(char *str),因为参数"abc"是按值传递的,调用构造函数前会创建个临时变量存储"abc",且该临时变量不是const类型

[解决办法]
如果想调用构造函数MyClass(const char* str),必须明确定义const变量
const char* cstr = "abc";
MyClass obj(cstr);


[解决办法]
基本上老点的编译器都将它视作non-const,TC还允放直接修改它.
[解决办法]
这是兼容旧语言标准遗留问题,你可以看作是C++语言的一个小bug

计算机等级考试的标准太低:)国内的等级考试要求都很低的

我们应该写出风格好的代码,而不要利用bug
至于你说的那个函数,即使他不是const char*,理论上也绝对不需要强制转换
应该说他是const char [],但是编译器需要的是const char*,这是指针和数组的差别

[解决办法]
计算机等级考试,我都没有考过它,照样编程。呵呵!
[解决办法]
没次看大家的帖子都能学到点东西.学习中

热点排行