草庐IT

CONSTANTS

全部标签

c++ - 为什么在 C++ 中允许对 const 全局变量进行多重定义,而在 C 中却不允许?

由于单一定义规则,在C或C++中不允许对全局变量进行多重定义。但是,在C++中,一个const全局变量可以在多个编译单元中定义而不会出错。这与C中的不同。为什么C++允许,而C不允许?与C相比,为什么C++中const全局变量的用法和行为与非const全局变量有这种不同?C++和C在const方面发生了什么?例如,这在C++中是允许的,但在C中是错误的://Foo.cppconstintFoo=99;//Main.cppconstintFoo=99;intmain(){cout这对C来说很好,但对C++来说是错误的://Foo.cppconstintFoo=99;//Main.cppe

c++ - 模板参数中的 "T"和 "const T"有什么区别吗?

以下两种语法有什么区别:templatestructA;//(1)和templatestructA;//(2)关于何时使用每种语法的任何一般准则? 最佳答案 没有。§14.1[temp.param]p5[...]Thetop-levelcv-qualifiersonthetemplate-parameterareignoredwhendeterminingitstype. 关于c++-模板参数中的"T"和"constT"有什么区别吗?,我们在StackOverflow上找到一个类似的问题

c++ - 模板参数中的 "T"和 "const T"有什么区别吗?

以下两种语法有什么区别:templatestructA;//(1)和templatestructA;//(2)关于何时使用每种语法的任何一般准则? 最佳答案 没有。§14.1[temp.param]p5[...]Thetop-levelcv-qualifiersonthetemplate-parameterareignoredwhendeterminingitstype. 关于c++-模板参数中的"T"和"constT"有什么区别吗?,我们在StackOverflow上找到一个类似的问题

c++ - 为什么 int 指针的 const vector 中的取消引用元素是可变的?

我不确定constvector的真正含义所以我编译了下面的代码以获得一个想法,但现在更加困惑了。vectorv;intx=1,y=2;v.push_back(&x);v.push_back(&y);constvectorw=v;w[0]=&y;//failed.Elementisaconstantpointer?*(w[0])++;//failed.Elementpointerreferencestoconstantvalue?如果我停在这里,我会假设constvector是constint*const的vector,但后来我尝试了以下显然与该假设相矛盾的方法。*(w[0])+=3;/

c++ - 为什么 int 指针的 const vector 中的取消引用元素是可变的?

我不确定constvector的真正含义所以我编译了下面的代码以获得一个想法,但现在更加困惑了。vectorv;intx=1,y=2;v.push_back(&x);v.push_back(&y);constvectorw=v;w[0]=&y;//failed.Elementisaconstantpointer?*(w[0])++;//failed.Elementpointerreferencestoconstantvalue?如果我停在这里,我会假设constvector是constint*const的vector,但后来我尝试了以下显然与该假设相矛盾的方法。*(w[0])+=3;/

C++ - enum vs. const vs. #define

文末在此:http://www.learncpp.com/cpp-tutorial/45-enumerated-types/,它提到了以下内容:最后,与常量变量一样,枚举类型会显示在调试器中,在这方面它们比#defined值更有用。上面的粗体字是怎么实现的?谢谢。 最佳答案 考虑这段代码,#defineWIDTH300enumeconst{eWidth=300};constintWidth=300;structsample{};intmain(){samples;intx=eWidth*s;//error1inty=WIDTH*s;

C++ - enum vs. const vs. #define

文末在此:http://www.learncpp.com/cpp-tutorial/45-enumerated-types/,它提到了以下内容:最后,与常量变量一样,枚举类型会显示在调试器中,在这方面它们比#defined值更有用。上面的粗体字是怎么实现的?谢谢。 最佳答案 考虑这段代码,#defineWIDTH300enumeconst{eWidth=300};constintWidth=300;structsample{};intmain(){samples;intx=eWidth*s;//error1inty=WIDTH*s;

c++ - 将 vector<T> 转换为 vector<const T>

我有一个vector类型的成员变量(其中T是一个自定义类,但它也可以是int。)我有一个函数,我想从中返回一个指向该vector的指针,但我不希望调用者能够更改vector或其项。所以我希望返回类型为constvector*我尝试过的所有类型转换方法都不起作用。编译器一直提示T与constT不兼容。这里有一些代码演示了我正在尝试做的事情的要点;vectora;constvector*b=(constvector*)(&a);此代码无法为我编译。提前致谢! 最佳答案 如果您有constvector您不能修改容器,也不能修改容器中的任何

c++ - 将 vector<T> 转换为 vector<const T>

我有一个vector类型的成员变量(其中T是一个自定义类,但它也可以是int。)我有一个函数,我想从中返回一个指向该vector的指针,但我不希望调用者能够更改vector或其项。所以我希望返回类型为constvector*我尝试过的所有类型转换方法都不起作用。编译器一直提示T与constT不兼容。这里有一些代码演示了我正在尝试做的事情的要点;vectora;constvector*b=(constvector*)(&a);此代码无法为我编译。提前致谢! 最佳答案 如果您有constvector您不能修改容器,也不能修改容器中的任何

c++ - 一种计算数学常数 e 的有效方法

由于许多除法运算,常数e作为无限级数之和的标准表示对于计算来说非常低效。那么有没有其他方法可以有效地计算常数?谢谢!编辑在关注了你的一些链接之后,我相信效率来自一种我不熟悉的称为二进制拆分的技术(虽然表示仍然提到系列)。如果有人熟悉它,请随时贡献。 最佳答案 由于不可能计算出“e”的每个位,因此您必须选择一个停止点。double:16位小数对于实际应用,“尽可能接近'e'真实值的64位double浮点值——大约16位十进制数字”绰绰有余。正如KennyTM所说,该值已经在数学库中为您预先计算好了。如果你想自己计算,正如HansPas