c++ primer中提到: 我创建了3个cpp文件: test.cpp #include <iostream> #include "con.h" void a(); int main() { std::cout << con << std::endl; a(); return 0; } con.h #include <cmath> #ifndef FILE_H #define FILE_H using std::sqrt; const double con = sqrt( 4 ); #endif #include <iostream> #include "con.h" void a() { std::cout << "In a.cpp, con:"<< con << std::endl; } test.cpp和a.cpp都使用了con这个const,但编译运行ok, 请问为什么会这样规定 |
|
10分 |
你这个不是用的就是常量表达式吗..哪里有变量 sqrt(4) 就是一个常量啊
|
常量表达式是编译器在编译时就能够计算出结果的整型表达式
sqrt( 4 ) 不是 |
|
有人知道么
|
|
10分 |
你程序本身就没什么问题,虽然不是在编译时就确定,但程序运行时首先会进入到sqrt()函数进行计算常量的值,楼主可以加断点自己试
另外你也说,书上是说不应该,而没说不能(如果是在这个头文件后部分的函数有可能会找不到) |
10分 |
C++ const 是缺省内部链接的,
你的这个常量初始化代码,很可能会生成很多份, 每个#include的头文件一份。 |
10分 |
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
|