通常我们把工程中用到的一些宏定义统一放到一个文件中,此后再需要使用这些宏定义的文件中直接包含这个文件既可,但如果我把它全改成常量了话,那么编译器就会抱怨常量多次重复定义,常量在这种情况下就难以发挥作用了,但这也是我们实际工作中宏最常用的方法。所以感觉Scott Meyers提出的这一条是否有欠慎重考虑!
18 个解决方案
#1
const可以定义类型
#2
只在一个文件里定义会有重定义的报错?
你该不会在头文件里没有用#ifndef...#define...#endif吧?
你该不会在头文件里没有用#ifndef...#define...#endif吧?
#3
const常量的定义一般放在c或cpp文件中,
头文件放extern声明。这样就不会有问题了。
头文件放extern声明。这样就不会有问题了。
#4
楼上的说得对,用“extern”关键字就能很不错的解决问题。
#5
使用static声明变量,这样这些变量的访问仅能被限定在该模块中。
#6
刚刚重新翻了一下,(根据C++标准)在头文件中定义const常量并不会导致冲突,在VC6.0上测试通过。
#7
变量只能定义一次,但能声明多次。
在与常量密切相关的c、cpp文件中定义常量变量,然后在头文件中声明extern或者在用到的地方声明extern
在与常量密切相关的c、cpp文件中定义常量变量,然后在头文件中声明extern或者在用到的地方声明extern
#8
楼主你跑的太远了.
基础太差, 建议学完C++以后, 再找一本C语言最基础的书看看.
在C++中用const表示常量是一种非常好的方法. 可以进行类型检查. 用宏是做不到的.
基础太差, 建议学完C++以后, 再找一本C语言最基础的书看看.
在C++中用const表示常量是一种非常好的方法. 可以进行类型检查. 用宏是做不到的.
#9
mark
#10
我在工作中一直都用const代替#define
效果还可以
效果还可以
#11
主要 是 c++ 对类型要求比较 严格
使用 define ,是没有类型的,只做 替换
使用 const ,对 c++ 程序来说 , 明确的告诉系统
一个 变量的 类型
这对 别人 来说 , 看程序, 实现 类型转换 方面
就 很 清晰 明了
使用 define ,是没有类型的,只做 替换
使用 const ,对 c++ 程序来说 , 明确的告诉系统
一个 变量的 类型
这对 别人 来说 , 看程序, 实现 类型转换 方面
就 很 清晰 明了
#12
再稍微深入一点:
如果确实在不同文件中存在相同的const 常量,该怎么办?
是将它们定义在不同namespace来解决,
还是定义为不同抽象类的静态成员变量?
为甚?
如果确实在不同文件中存在相同的const 常量,该怎么办?
是将它们定义在不同namespace来解决,
还是定义为不同抽象类的静态成员变量?
为甚?
#13
在.h中的都是声明,但并没有给这个变量分配空间。
在.cpp中才是定义,只有这里才分配空间。
例如global.h中可以这么写:
#ifndef _GLOBAL_H_ // 防止重复包含
#define _GLOBAL_H_
extern const int kknd;
#endif
然后在某个cpp文件中定义,如global.cpp中
#include global.h
const int kknd = 10;
在.cpp中才是定义,只有这里才分配空间。
例如global.h中可以这么写:
#ifndef _GLOBAL_H_ // 防止重复包含
#define _GLOBAL_H_
extern const int kknd;
#endif
然后在某个cpp文件中定义,如global.cpp中
#include global.h
const int kknd = 10;
#14
请问容易找到有经验的LINUX/C++开发人员吗? 我找来找去还没找到. JAVA倒有不少. 请看以下我的帖子:
http://expert.csdn.net/Expert/topic/1999/1999723.xml?temp=.8192255
http://expert.csdn.net/Expert/topic/1999/1999723.xml?temp=.8192255
#15
>回复人: Joyfish(GoodLuckIsImportant)
>在.h中的都是声明,但并没有给这个变量分配空间。
>在.cpp中才是定义,只有这里才分配空间。
这两句话相当有问题。
>在.h中的都是声明,但并没有给这个变量分配空间。
>在.cpp中才是定义,只有这里才分配空间。
这两句话相当有问题。
#16
〉回复人: trancebaby(一平) ( ) 信誉:101 2003-07-19 23:21:00 得分:0
〉〉回复人: Joyfish(GoodLuckIsImportant)
〉〉在.h中的都是声明,但并没有给这个变量分配空间。
〉〉在.cpp中才是定义,只有这里才分配空间。
〉〉这两句话相当有问题。
确实,我的话很不严谨。C++里面并没有规定文件后缀的有何特殊意思。
我的意思是说最好只在.h中申明,然后在某个具体的cpp中定义(实现),
当然这里不考虑模板或内联的情况。
〉〉回复人: Joyfish(GoodLuckIsImportant)
〉〉在.h中的都是声明,但并没有给这个变量分配空间。
〉〉在.cpp中才是定义,只有这里才分配空间。
〉〉这两句话相当有问题。
确实,我的话很不严谨。C++里面并没有规定文件后缀的有何特殊意思。
我的意思是说最好只在.h中申明,然后在某个具体的cpp中定义(实现),
当然这里不考虑模板或内联的情况。
#17
c++中就使用const,它还认得类型呢
#18
还是看看高手门的解释吧,不要轻易怀疑大师说的,别说是Scott Meyers , 就是CSDN里的朋友门水平都很高,自己不懂的多问多学,不要轻易怀疑大师。
可以看看stdio.h这样的头文件,看看是怎么解决重复定义的吧!
可以看看stdio.h这样的头文件,看看是怎么解决重复定义的吧!
#1
const可以定义类型
#2
只在一个文件里定义会有重定义的报错?
你该不会在头文件里没有用#ifndef...#define...#endif吧?
你该不会在头文件里没有用#ifndef...#define...#endif吧?
#3
const常量的定义一般放在c或cpp文件中,
头文件放extern声明。这样就不会有问题了。
头文件放extern声明。这样就不会有问题了。
#4
楼上的说得对,用“extern”关键字就能很不错的解决问题。
#5
使用static声明变量,这样这些变量的访问仅能被限定在该模块中。
#6
刚刚重新翻了一下,(根据C++标准)在头文件中定义const常量并不会导致冲突,在VC6.0上测试通过。
#7
变量只能定义一次,但能声明多次。
在与常量密切相关的c、cpp文件中定义常量变量,然后在头文件中声明extern或者在用到的地方声明extern
在与常量密切相关的c、cpp文件中定义常量变量,然后在头文件中声明extern或者在用到的地方声明extern
#8
楼主你跑的太远了.
基础太差, 建议学完C++以后, 再找一本C语言最基础的书看看.
在C++中用const表示常量是一种非常好的方法. 可以进行类型检查. 用宏是做不到的.
基础太差, 建议学完C++以后, 再找一本C语言最基础的书看看.
在C++中用const表示常量是一种非常好的方法. 可以进行类型检查. 用宏是做不到的.
#9
mark
#10
我在工作中一直都用const代替#define
效果还可以
效果还可以
#11
主要 是 c++ 对类型要求比较 严格
使用 define ,是没有类型的,只做 替换
使用 const ,对 c++ 程序来说 , 明确的告诉系统
一个 变量的 类型
这对 别人 来说 , 看程序, 实现 类型转换 方面
就 很 清晰 明了
使用 define ,是没有类型的,只做 替换
使用 const ,对 c++ 程序来说 , 明确的告诉系统
一个 变量的 类型
这对 别人 来说 , 看程序, 实现 类型转换 方面
就 很 清晰 明了
#12
再稍微深入一点:
如果确实在不同文件中存在相同的const 常量,该怎么办?
是将它们定义在不同namespace来解决,
还是定义为不同抽象类的静态成员变量?
为甚?
如果确实在不同文件中存在相同的const 常量,该怎么办?
是将它们定义在不同namespace来解决,
还是定义为不同抽象类的静态成员变量?
为甚?
#13
在.h中的都是声明,但并没有给这个变量分配空间。
在.cpp中才是定义,只有这里才分配空间。
例如global.h中可以这么写:
#ifndef _GLOBAL_H_ // 防止重复包含
#define _GLOBAL_H_
extern const int kknd;
#endif
然后在某个cpp文件中定义,如global.cpp中
#include global.h
const int kknd = 10;
在.cpp中才是定义,只有这里才分配空间。
例如global.h中可以这么写:
#ifndef _GLOBAL_H_ // 防止重复包含
#define _GLOBAL_H_
extern const int kknd;
#endif
然后在某个cpp文件中定义,如global.cpp中
#include global.h
const int kknd = 10;
#14
请问容易找到有经验的LINUX/C++开发人员吗? 我找来找去还没找到. JAVA倒有不少. 请看以下我的帖子:
http://expert.csdn.net/Expert/topic/1999/1999723.xml?temp=.8192255
http://expert.csdn.net/Expert/topic/1999/1999723.xml?temp=.8192255
#15
>回复人: Joyfish(GoodLuckIsImportant)
>在.h中的都是声明,但并没有给这个变量分配空间。
>在.cpp中才是定义,只有这里才分配空间。
这两句话相当有问题。
>在.h中的都是声明,但并没有给这个变量分配空间。
>在.cpp中才是定义,只有这里才分配空间。
这两句话相当有问题。
#16
〉回复人: trancebaby(一平) ( ) 信誉:101 2003-07-19 23:21:00 得分:0
〉〉回复人: Joyfish(GoodLuckIsImportant)
〉〉在.h中的都是声明,但并没有给这个变量分配空间。
〉〉在.cpp中才是定义,只有这里才分配空间。
〉〉这两句话相当有问题。
确实,我的话很不严谨。C++里面并没有规定文件后缀的有何特殊意思。
我的意思是说最好只在.h中申明,然后在某个具体的cpp中定义(实现),
当然这里不考虑模板或内联的情况。
〉〉回复人: Joyfish(GoodLuckIsImportant)
〉〉在.h中的都是声明,但并没有给这个变量分配空间。
〉〉在.cpp中才是定义,只有这里才分配空间。
〉〉这两句话相当有问题。
确实,我的话很不严谨。C++里面并没有规定文件后缀的有何特殊意思。
我的意思是说最好只在.h中申明,然后在某个具体的cpp中定义(实现),
当然这里不考虑模板或内联的情况。
#17
c++中就使用const,它还认得类型呢
#18
还是看看高手门的解释吧,不要轻易怀疑大师说的,别说是Scott Meyers , 就是CSDN里的朋友门水平都很高,自己不懂的多问多学,不要轻易怀疑大师。
可以看看stdio.h这样的头文件,看看是怎么解决重复定义的吧!
可以看看stdio.h这样的头文件,看看是怎么解决重复定义的吧!