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*,这是指针和数组的差别
[解决办法]计算机等级考试,我都没有考过它,照样编程。呵呵!
[解决办法]没次看大家的帖子都能学到点东西.学习中