草庐IT

CONSTANTS

全部标签

c++ - 为什么即使 T 的 value_type 是 const,std::is_const::value 也是 'false'?

#includestructfoo;intmain(){constfoo*bar;static_assert(std::is_const::value,"expectedconstbutthisisnon-const!");}这会导致static_assert失败,这是意料之外的。这有点类似于thisquestion在const引用上,但不完全相同。在我的例子中,取消引用bar应该给出一个constfoo的实例作为它的类型,但std::is_const却另有说明。 最佳答案 简而言之,这是因为指向const类型的引用或指针不是con

c++ - std::string 常量的正确习语?

我有一张代表数据库对象的map。我想从中获得“众所周知”的值(value)std::mapdbo;...std::stringval=map["foo"];一切都很好,但让我感到震惊的是,“foo”在每次调用时都被转换为临时字符串。当然,最好有一个常量std::string(当然,与刚刚获取对象的磁盘IO相比,它可能是一个很小的开销,但我认为它仍然是一个有效的问题)。那么std::string常量的正确用法是什么?例如-我可以拥有conststd::stringFOO="foo";在hdr中,但后来我得到了多个拷贝编辑:还没有答案说明如何声明std::string常量。忽略整个map、

c++ - std::string 常量的正确习语?

我有一张代表数据库对象的map。我想从中获得“众所周知”的值(value)std::mapdbo;...std::stringval=map["foo"];一切都很好,但让我感到震惊的是,“foo”在每次调用时都被转换为临时字符串。当然,最好有一个常量std::string(当然,与刚刚获取对象的磁盘IO相比,它可能是一个很小的开销,但我认为它仍然是一个有效的问题)。那么std::string常量的正确用法是什么?例如-我可以拥有conststd::stringFOO="foo";在hdr中,但后来我得到了多个拷贝编辑:还没有答案说明如何声明std::string常量。忽略整个map、

c++ - 调用 const 函数而不是其非 const 版本

为了我的目的,我尝试包装类似于Qt的共享数据指针的东西,经过测试,我发现应该调用const函数时,选择了它的非const版本。我正在使用C++0x选项进行编译,这是一个最小的代码:structData{intx()const{return1;}};templatestructcontainer{container(){ptr=newT();}T&operator*(){puts("nonconstdataptr");return*ptr;}T*operator->(){puts("nonconstdataptr");returnptr;}constT&operator*()const{

c++ - 调用 const 函数而不是其非 const 版本

为了我的目的,我尝试包装类似于Qt的共享数据指针的东西,经过测试,我发现应该调用const函数时,选择了它的非const版本。我正在使用C++0x选项进行编译,这是一个最小的代码:structData{intx()const{return1;}};templatestructcontainer{container(){ptr=newT();}T&operator*(){puts("nonconstdataptr");return*ptr;}T*operator->(){puts("nonconstdataptr");returnptr;}constT&operator*()const{

c++ - 为什么允许 int 和 const int 的不同转换函数?

为什么允许在C++中编译以下内容?#includeusingnamespacestd;classmytest{public:operatorint(){return10;}operatorconstint(){return5;}};intmain(){mytestmt;//intx=mt;//ERRORambigious//constintx=mt;//ERRORambigious}为什么允许编译转换运算符的不同版本(基于常量)是有意义的,因为它们的使用总是会导致歧义?有人可以澄清我在这里缺少什么吗? 最佳答案 对于转换,它们是模棱

c++ - 为什么允许 int 和 const int 的不同转换函数?

为什么允许在C++中编译以下内容?#includeusingnamespacestd;classmytest{public:operatorint(){return10;}operatorconstint(){return5;}};intmain(){mytestmt;//intx=mt;//ERRORambigious//constintx=mt;//ERRORambigious}为什么允许编译转换运算符的不同版本(基于常量)是有意义的,因为它们的使用总是会导致歧义?有人可以澄清我在这里缺少什么吗? 最佳答案 对于转换,它们是模棱

Ruby "CONSTANTS"似乎是不可改变的?

我知道Ruby中的“常量”按照惯例称为常量,但实际上是可变的。然而,我的印象是,当他们“变异”时,有一个警告:classZ2M=[0,1]endZ2::M#=>[0,1]Z2::M=[0,3](irb):warning:alreadyinitializedconstantZ2::M(irb):warning:previousdefinitionofMwashere但是我发现情况并非一直如此:a=Z2::Ma[1]=2Z2::M#=>[0,2]andnowarning这是“警告”系统的漏洞吗?我推断常量的赋值会重复它,但我猜这不是真的,因为常量和变量似乎指向同一个对象?这是否意味着所有所

c++ - 为什么 "most important const"必须是 const?

在http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/它提到了“最重要的const”,其中C++故意指定将临时对象绑定(bind)到堆栈上对const的引用将临时对象的生命周期延长到引用本身的生命周期。我想知道为什么c++只允许在引用为const时延长对象的生命周期,而不是在不是时延长对象的生命周期?该功能背后的原因是什么?为什么它必须是const? 最佳答案 这是一个例子:voidsquare(int&x){x=x*x;

c++ - 为什么 "most important const"必须是 const?

在http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/它提到了“最重要的const”,其中C++故意指定将临时对象绑定(bind)到堆栈上对const的引用将临时对象的生命周期延长到引用本身的生命周期。我想知道为什么c++只允许在引用为const时延长对象的生命周期,而不是在不是时延长对象的生命周期?该功能背后的原因是什么?为什么它必须是const? 最佳答案 这是一个例子:voidsquare(int&x){x=x*x;