草庐IT

MY_CONST

全部标签

c++ - 从 Visual Studio 2010 开始,取消引用集合上的迭代器时的 Const 引用

从VisualStudio2010开始,对集合进行迭代似乎会返回一个迭代器,该迭代器将数据取消引用为“const数据”而不是非常量。以下代码是在VisualStudio2005上编译但在2010上编译不了的示例(这是一个人为的示例,但清楚地说明了我们在自己的代码中发现的问题)。在这个例子中,我有一个存储位置和温度的类。我定义了只使用位置而不是温度的比较运算符(不是全部,只是足以说明问题)。关键是,对我来说,如果位置相同,则两个实例是相同的;我不关心温度。#includeclassDataPoint{public:DataPoint(intx,inty):m_x(x),m_y(y),m_

c++ - 使用 decltype 将其转换为 const

我正在尝试解决一个问题,其中decltype会大大简化事情,但我在*thisdecltype遇到了问题并添加一个const限定符。下面的示例代码演示了这个问题。#includestructFoo{voidbar(){static_cast(*this).bar();}voidbar()const{std::cout代码在MSVC2010中编译,但执行递归直到发生堆栈溢出。Ideone报告编译器错误prog.cpp:Inmemberfunction'voidFoo::bar()':prog.cpp:7:38:error:'const'qualifierscannotbeappliedto

c++ - 堆分配的 const 对象与非 const 对象有何不同?

在C++中可以allocateaconstobjectonheap:constClass*object=newconstClass();const_cast(object)->NonConstMethod();//UB因此尝试写入对象将是UB。我不明白这样的对象与未声明为const的堆分配对象有何不同:constClass*object=newClass();我的意思是,当我在堆栈上分配一个对象时,它会进入特定于实现的自动存储,因此可能有一些特定于实现的方法允许分配const以某种特殊方式生成对象,当我写入对象时会产生UB。然而,每当我使用new时,编译器都需要发出operatorne

c++ - 为什么不能创建空类的 const 对象

#includeclassA{public:voidfoo()const{std::cout上面的代码无法编译,有大佬告诉我为什么吗? 最佳答案 您需要对其进行初始化。Thisisaknownproblemwiththespec. 关于c++-为什么不能创建空类的const对象,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5335836/

c++ - ->second 是否为迭代器 my_map.end() 定义?

我正在使用std::map.我想测试是否my_map.find(key)返回一个特定的指针。现在我在做;autoiter=my_map.find(key);if((iter!=my_map.end())&&(iter->second==expected)){//Somethingwonderfulhashappened}然而,operator*迭代器的需要返回一个引用。凭直觉我假设它是有效的并且完全初始化?如果是这样,my_map.end()->second将是NULL,并且(因为NULL从来都不是预期的),我可以将我的if语句减少到:if(iter->second==expected

c++ - 在 C++ 中什么时候使用 *、& 或 const 是正确的时机?

我在研究指针引用时遇到了输入参数的不同方法。谁能解释一下每一个的实际含义?我认为第一个很简单,x是传入参数的拷贝,因此在堆栈上创建了另一个变量。至于其他的我一无所知。voiddoSomething1(intx){//code}voiddoSomething2(int*x){//code}voiddoSomething3(int&x){//code}voiddoSomething3(intconst&x){//code}我在声明变量时也看到了类似的东西。我不明白他们之间的区别。我知道第一个会将100放入堆栈上的变量y中。它不会创建新地址或任何东西。//example1inty=100;/

c++ - 如何将 int 转换为 const int 以在堆栈上分配数组大小?

我试图在堆栈上分配一个固定大小的整数数组#includeusingnamespacestd;intmain(){intn1=10;constintN=const_cast(n1);//constintN=10;cout但是,这在我使用N的最后一行给出了一个错误定义一个固定的errorC2057:expectedconstantexpression.但是,如果我定义N作为constintN=10,代码编译得很好。我应该如何输入n1将其视为constint?我试过了:constintN=const_cast(n1)但这会产生错误。编辑:我正在使用MSVC++2008来编译这个...用g++

C++ : code explanation for method prototype with const = 0

我有一个类声明,其中有一段我不理解的代码:classWeapon{public:virtualvoidattack()const=0;};const=0部分是什么意思? 最佳答案 这是一个纯虚方法(=0),不应更改类(const)的数据。您应该在派生自Weapon的类之一中提供实现!看到这个:Differencebetweenavirtualfunctionandapurevirtualfunction您应该派生自Weapon(可以认为是接口(interface))具体类,例如Axe、Shotgun等。.您将在其中提供attack(

c++ - 如何在类的头文件中定义一个 const double?

在我的类的头文件中,我正在尝试以下操作并收到编译器投诉:private:staticconstdoublesome_double=1.0;您应该如何实际执行此操作? 最佳答案 在C++11中,由于constexpr,您可以拥有非整数常量表达式:private:staticconstexprdoublesome_double=1.0; 关于c++-如何在类的头文件中定义一个constdouble?,我们在StackOverflow上找到一个类似的问题: http

c++ - const 类型限定符紧跟在函数名之后

这个问题在这里已经有了答案:Meaningof'const'lastinafunctiondeclarationofaclass?(12个答案)关闭7年前。在C++中,有时我会看到如下声明:return_typefunction_name(datatypeparameter1,datatypeparameter2)const{/*................*/}在这种情况下,这个const类型限定符究竟做了什么?