vc++6.0与新版编译器多了哪些注意事项(1)

VC6++,这是一个比较老的编译器了,对 C++ 标准支持存在一些局限性,

一.关于 warning C4003: not enough actual parameters for macro 'getc' 警告及相关错误
原因分析:在 C 语言的标准库中有一个名为 getc 的宏(通常用于从文件流中读取字符等操作),代码里定义了名为 getc 的类 point 的静态成员函数,当编译器处理到你调用 point::getc 时,它可能会先尝试按照 C 语言的宏展开机制去处理 getc,误以为这是在调用那个标准库宏但参数个数不对(因为你是作为无参数函数调用的),所以产生了这个警告以及后续类似的报错(像在 point::getc 相关调用处报语法错误相关的错)。》》》》》》这老编译器容易出现命名冲突导致的问题。《《《《《《
遇到这种情况改个名就好了

而dev较新版本的不会出现这种情况

二.在 C++ 中,复制构造函数通常最好加上const修饰符,这是一种良好的编程习惯,也是为了遵循 C++ 的常量正确性原则。
VC++6.0 对 C++ 标准的遵循相对更严格一些,它强调这种常量正确性,要求明确地使用const来保证参数在函数内部不会被意外修改.

加上const关键字后

Dev-C++ 在编译时可能对这种情况不会报错,它可能会自动进行一些隐式的转换或处理,使得在没有显式添加const的情况下也能通过编译。

当然,但这并不意味着在 Dev-C++ 中不需要遵循常量正确性原则,只是它在编译时的处理方式不同。


const 的作用:当一个对象作为参数传递给复制构造函数时,加上const修饰表示该函数不会修改传入对象的状态,这在语义上更加明确和清晰。

posted @ 2024-12-08 14:59  菲菲龙  阅读(75)  评论(0)    收藏  举报