标签: const-method

C++ - 为什么不能使用'const'限定符创建静态成员函数

今天我遇到了问题.我需要一个static会员功能,const不是必须而是更好.但是,我没有成功.任何人都可以说为什么或如何?

c++ static language-lawyer const-method

78
推荐指数
2
解决办法
4万
查看次数

我应该声明这些方法是什么?

我正在研究一些C++代码,其中我有几个私有方法的管理器对象,如

void NotifyFooUpdated();
Run Code Online (Sandbox Code Playgroud)

OnFooUpdated()在该对象的侦听器上调用该方法.

请注意,它们不会修改此对象的状态,因此它们在技术上可以成为const方法,即使它们通常会修改整个系统的状态.特别是,侦听器对象可能会回调此对象并对其进行修改.

就我个人而言,我想留下它们,而不是宣布它们const.

但是,我们的静态代码检查器QAC将此标记为偏差,因此我要么必须声明它们const,要么我必须争论为什么它们应该保持非常量并获得偏差的授权.

没有声明这些方法的论据是什么const
或者我应该关注QAC并宣布它们const
我应该采用仅限于此对象的严格本地观点,还是将系统视为一个整体?

c++ const static-code-analysis const-method

13
推荐指数
1
解决办法
1020
查看次数

为什么const临时选择在const const上调用非const成员函数?

示例代码取自:http://en.cppreference.com/w/cpp/types/add_cv (我修改了一下.)

struct foo
{
    void m() { std::cout << "Non-cv\n"; }
    void m() const { std::cout << "Const\n"; }
};

template<class T>
void call_m()
{
  T().m();
}

int main()
{
    call_m<foo>();
    call_m<const foo>(); //here
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Non-cv
Non-cv
Run Code Online (Sandbox Code Playgroud)

在第二次调用中,T是const限定的,所以T()应该调用const版本,对吧?还是有一些我错过的特殊规则?

c++ visual-c++ const-method visual-studio-2012

8
推荐指数
1
解决办法
117
查看次数

C++ 重载解析、转换运算符和 const

在这种情况下

void f(int *);
void f(const int *);
...
int i;
f(&i);
Run Code Online (Sandbox Code Playgroud)

情况很清楚 - f(int *) 被调用,这似乎是正确的。

但是,如果我有这个(错误地这样做了(*)):

class aa
{
public:
    operator bool() const;
    operator char *();
};

void func(bool);

aa a;
func(a);
Run Code Online (Sandbox Code Playgroud)

运算符 char *() 被调用。我不明白为什么这样的决策路径比使用 operator bool() 更好。有任何想法吗?

(*) 如果将 const 添加到第二个运算符,则代码当然会按预期工作。

c++ overloading conversion-operator language-lawyer const-method

4
推荐指数
1
解决办法
515
查看次数

const 成员函数只能调用 const 成员函数?

const 成员函数只调用 const 成员函数吗?

class Transmitter{
  const static string msg;
  mutable int size;
  public: 
    void xmit() const{
    size = compute();
    cout<<msg;
  }
  private:
   int compute() const{return 5;}
};

 string const Transmitter::msg = "beep";

 int main(){
   Transmitter t;
   t.xmit();
   return EXIT_SUCCESS;
 }
Run Code Online (Sandbox Code Playgroud)

如果我不使 compute() 成为一个常量,那么编译器就会抱怨。是不是因为 const 成员函数不允许修改成员,它不允许对非常量的任何调用,因为这意味着 const 成员函数将“间接”修改数据成员?

c++ const-method

2
推荐指数
1
解决办法
2377
查看次数

Const方法返回向量元素的非const引用

我很难弄清楚如何从const类方法返回non-const对元素的引用std::vector.我想要的一个简单例子是,

template<class T>
class MyClass
{
 public:
 MyClass : myVec(3)
 {
 }

 T& x() const
 {
    return *(myVec.data())[0]
 }

 std::vector<T> myVec;
}
Run Code Online (Sandbox Code Playgroud)

我想要的行为是,我希望能够做到以下几点,

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)
Run Code Online (Sandbox Code Playgroud)

Eigen给出了相同类型的行为,但我无法弄清楚如何让它工作.

c++ const reference vector const-method

2
推荐指数
1
解决办法
882
查看次数