标签: const

friend函数返回对私有数据成员的引用

我有两个关于以下代码的问题.

class cls{
    int vi;
    public:
        cls(int v=37) { vi=v; }
        friend int& f(cls);
};

int& f(cls c) { return c.vi; }

int main(){
    const cls d(15);
    f(d)=8;
    cout<<f(d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么要编译,因为f(d)= 8试图修改const对象?
  2. 为什么即使在删除const属性后它仍会打印15?

c++ oop const reference

0
推荐指数
1
解决办法
205
查看次数

使用const&打印出列表

嘿,我有一个包含值的列表,我想用const&打印出来.我可以通过引用它来做到这一点但是当我把const放入时我得到一个错误.我不确定为什么会这样,因为代码不会编辑列表.这是我的代码.

// Prints out the list declared
template<typename DATA_TYPE>
    void print(const list<DATA_TYPE> &myList){
    for(list<DATA_TYPE>::iterator pos = myList.begin(); pos != myList.end(); pos++){
        DATA_TYPE currentWord = *pos;
        cout << currentWord << " ";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你也可以通过错误背后的逻辑,那就太酷了,谢谢.

c++ const reference list

0
推荐指数
1
解决办法
167
查看次数

Qt忽略const说明符

我创建了简单的代码片段,以显示我注意到的奇怪行为.而已:

#include <QCoreApplication>
#include <QLineEdit>

class MyObject : public QWidget
{
public:
    explicit MyObject(QWidget *parent = 0) : QWidget(parent) {
        editor = new QLineEdit(this);
    }

    void setValue(const QString &s) const {
        editor->setText(s);
        editor->setReadOnly(true);
        editor->setMaxLength(s.length());
    }

private:
    QLineEdit *editor;
};

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

MyObject::setValue函数有const说明符,但这段代码编译得很好.需要注意的是setText,setReadOnlysetMaxLength功能都没有const:

void setText(const QString &);
void setReadOnly(bool);
void setMaxLength(int);
Run Code Online (Sandbox Code Playgroud)

我只是想知道导致这种行为的原因是什么?我使用Qt 4.7.4和MingGW 4.6.2.

c++ qt const qt4

0
推荐指数
1
解决办法
83
查看次数

为什么我总是使用默认参数获取对象?

我有2个成员函数的问题,其中一个是const返回一个const:

const BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx) const
{
    return _mData[rowIdx*_mNumColumns + colIdx];
}

BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx)
{
    return _mData[rowIdx*_mNumColumns + colIdx];
}
Run Code Online (Sandbox Code Playgroud)

过了一会儿我用的代码:

// where this is a Board holding Nodes in std::vector
BoardNode nodeToAddAsNeighbor   = this->getBoardNode(x1+ x, y1+ y);
Run Code Online (Sandbox Code Playgroud)

无论的值y1,y,x,x1是的,我总是回以坐标中的节点(0,0).

然而,节点的其他参数是不同的,只有如上所述的坐标.

知道为什么吗?

编辑 我的副本构造函数:

BoardNode::BoardNode(const BoardNode & other) :
    _mNodeType(other._mNodeType),
    _coordinates( other._coordinates ),
    _neighboursVector( other._neighboursVector) {}
Run Code Online (Sandbox Code Playgroud)

c++ const

0
推荐指数
1
解决办法
67
查看次数

const函数继承

假设我有一个基类foo

class foo {
    virtual int get() const = 0;
}
Run Code Online (Sandbox Code Playgroud)

也许有20个子类foo_1,foo_2 ...继承自foo并且形式为:

class foo_1 : public foo {
    int get() const { return 1; }
}
...
class foo_20 : public foo {
    int get() const { return 20; }
}
Run Code Online (Sandbox Code Playgroud)

突然生活并不那么容易!我有一个类foo_21,必须这样做:

class foo_21 : public foo {
    int get() { member_ = false; return 0; }
    bool member_;
}
Run Code Online (Sandbox Code Playgroud)

问题是get在基类中声明为const,我必须在子类foo_21中更改一些东西.我怎么能找到一种解决方法呢?

c++ const function

0
推荐指数
1
解决办法
1252
查看次数

const参数是否与const参考参数相同

我有一个功能

void h(A const a){...};
Run Code Online (Sandbox Code Playgroud)

如果我这样做,行为是否有可能改变:

void h(A const &a){..same body as above..};
Run Code Online (Sandbox Code Playgroud)

您可以根据需要自由定义类型A. 当然.

c++ const

0
推荐指数
1
解决办法
131
查看次数

定义常量数据库

程序#1

// file.h
class File
{
public:
    static const int var = 9;
};
Run Code Online (Sandbox Code Playgroud)

-

// main.cpp
#include <iostream>
#include "file.h"
using namespace std;

int main() {
    File f;
    cout << f.var;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序#2

// file.h
int GlobalVar ;
class File
{
public:
    static const int var = 9;
};
Run Code Online (Sandbox Code Playgroud)

-

// main.cpp
extern int GlobalVar;

#include <iostream>
#include "file.h"
using namespace std;

int main() {
    cout << GlobalVar;
    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

程序#1运行正常,但程序#2给出链接器错误:

error LNK2005: "int GlobalVar" …
Run Code Online (Sandbox Code Playgroud)

c++ static const

0
推荐指数
1
解决办法
108
查看次数

如何使函数返回的数字用于定义数组中的元素?

我正在使用Opencv/c ++.我使用该函数获取视频中的帧数 int noOfFrames = cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_COUNT );

我还宣布了一个数组int Entropy[noOfFrames];.但由于变量noOfFrames是非常量的,因此会出错.

我甚至用过const_cast这个,但它仍然给出了错误.我希望数组的长度等于视频的帧数.

我该怎么做 ???

c++ opencv const

0
推荐指数
2
解决办法
55
查看次数

在VS2010中混淆std :: string :: c_str()行为

我确定我做错了什么,但对于我的生活,我无法弄清楚是什么!请考虑以下代码:

cerr<<el.getText()<<endl;
cerr<<el.getText().c_str()<<endl;
cerr<<"---"<<endl;
const char *value = el.getText().c_str();
cerr<<"\""<<value<<"\""<<endl;
field.cdata = el.getText().c_str();
cerr<<"\""<<field.cdata<<"\""<<endl;
Run Code Online (Sandbox Code Playgroud)

el是一个XML元素并getText返回一个std :: string.正如预期的那样,el.getText()el.getText().c_str()打印相同的值.但是,当它分配结果时,value设置为""- 即空字符串c_str().此代码已写入设置field.cdata=value,因此清除它.将其更改为所谓的相同表达式value后,它可以正常工作,最后一行打印出预期值.

因为el在堆栈中,我认为我可能已经破坏了它 - 但即使在value设置之后,基础值el仍然是正确的.

我的下一个想法是,有一些奇怪的编译器特定问题,将事物分配给const指针,所以我写了以下内容:

std::string thing = "test";
std::cout << thing << std::endl;
std::cout << thing.c_str() << std::endl;
const char* value = thing.c_str();
std::cout << value << std::endl;
Run Code Online (Sandbox Code Playgroud)

正如所料,我进行了三次"测试".

所以现在我不知道发生了什么.很明显,我的程序中有一些奇怪的事情在样本中没有发生,但我不知道它是什么,我不知道如何继续寻找.有人可以启发我,或者至少指出我正确的方向吗?

c++ stl const stdstring visual-studio-2010

0
推荐指数
1
解决办法
848
查看次数

指针存储在std :: set const中吗?

我正在搜索代码中的错误,我有一个问题:

 class a
 {
 public:
 void foo(int a) {}
 }

  std::set<a*> set;
  std::set<a*>::iterator it = set.begin();

  it->foo(55); //gives me error:
  // error: request for member ‘foo’ in ‘* it.std::_Rb_tree_const_iterator<_Tp>::operator-><a*>()’, which is of pointer type ‘a* const’ (maybe you meant to use ‘->’ ?)
Run Code Online (Sandbox Code Playgroud)

为什么它不允许我使用非const函数呢?如果不使用强制转换,我可以做一组非常量指针?

c++ iterator stl const set

0
推荐指数
1
解决办法
914
查看次数

标签 统计

c++ ×10

const ×10

reference ×2

stl ×2

function ×1

iterator ×1

list ×1

oop ×1

opencv ×1

qt ×1

qt4 ×1

set ×1

static ×1

stdstring ×1

visual-studio-2010 ×1