标签: const

`const shared_ptr <T>`和`shared_ptr <const T>`之间的区别?

我正在为C++中的共享指针编写一个访问器方法,如下所示:

class Foo {
public:
    return_type getBar() const {
        return m_bar;
    }

private:
    boost::shared_ptr<Bar> m_bar;
}
Run Code Online (Sandbox Code Playgroud)

因此,为了支持getBar()返回类型的常量应该是一个boost::shared_ptr阻止Bar它指向的修改.我的猜测shared_ptr<const Bar>我希望返回的类型,但是const shared_ptr<Bar>会阻止指针本身的重新分配指向不同Bar但允许修改Bar它指向的......但是,我不确定.我很感激,如果有人知道肯定可以证实这一点,或者如果我弄错了就纠正我.谢谢!

c++ boost const shared-ptr

104
推荐指数
1
解决办法
5万
查看次数

为什么argc不是常数?

int main( const int argc , const char[] const argv)
Run Code Online (Sandbox Code Playgroud)

正如有效的C++第3项规定"尽可能使用const",我开始思考"为什么不制作这些'常数'参数const"?

是否存在argc在程序中修改值的任何情况?

c++ program-entry-point const effective-c++ argc

102
推荐指数
4
解决办法
6538
查看次数

去const的命名约定

我正在尝试确定是否存在constGolang 名称的命名约定.

我个人倾向于遵循C风格并以大写形式编写它们,但我在这个页面上找不到任何内容http://golang.org/doc/effective_go.html这似乎列出了该语言的一些命名约定.

const naming-conventions go

101
推荐指数
3
解决办法
5万
查看次数

如何在C++中初始化私有静态const映射?

我只需要字典或关联数组string=> int.

这种情况有类型映射C++.

但我只需要一个map forall实例( - > static),这个地图不能改变( - > const);

我用boost库找到了这种方式

 std::map<int, char> example = 
      boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c');
Run Code Online (Sandbox Code Playgroud)

没有这个lib还有其他解决方案吗?我尝试过类似的东西,但是地图初始化总是存在一些问题.

class myClass{
private:
    static map<int,int> create_map()
        {
          map<int,int> m;
          m[1] = 2;
          m[3] = 4;
          m[5] = 6;
          return m;
        }
    static map<int,int> myMap =  create_map();

};
Run Code Online (Sandbox Code Playgroud)

c++ static initialization const map

97
推荐指数
6
解决办法
13万
查看次数

如何在类中初始化const成员变量?

#include <iostream>

using namespace std;
class T1
{
  const int t = 100;
  public:

  T1()
  {

    cout << "T1 constructor: " << t << endl;
  }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试t用100. 初始化const成员变量时,但是它给了我以下错误:

test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Run Code Online (Sandbox Code Playgroud)

如何初始化const值?

c++ const

97
推荐指数
6
解决办法
25万
查看次数

C++ 0x lambda按值捕获总是const?

有没有办法按值捕获,并使捕获的值非const?我有一个库函子,我想捕获并调用一个非常量但应该是的方法.

以下不编译,但使foo :: operator()const修复它.

struct foo
{
  bool operator () ( const bool & a )
  {
    return a;
  }
};


int _tmain(int argc, _TCHAR* argv[])
{
  foo afoo;

  auto bar = [=] () -> bool
    {
      afoo(true);
    };

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda const c++11

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

C++ Const用法解释

const int* const Method3(const int* const&) const;
Run Code Online (Sandbox Code Playgroud)

有人可以解释每个const的用法吗?

c++ const

93
推荐指数
4
解决办法
5万
查看次数

为什么我不能在类中初始化非const静态成员或静态数组?

为什么我不能在类中初始化非const static成员或static数组?

class A
{
    static const int a = 3;
    static int b = 3;
    static const int c[2] = { 1, 2 };
    static int d[2] = { 1, 2 };
};

int main()
{
    A a;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器发出以下错误:

g++ main.cpp
main.cpp:4:17: error: ISO C++ forbids in-class initialization of non-const static member ‘b’
main.cpp:5:26: error: a brace-enclosed initializer is not allowed here before ‘{’ token
main.cpp:5:33: error: invalid in-class initialization of static data …
Run Code Online (Sandbox Code Playgroud)

c++ static const

93
推荐指数
3
解决办法
9万
查看次数

92
推荐指数
10
解决办法
2万
查看次数

我如何可移植地调用C++函数,该函数在某些平台上采用char**而在其他平台上采用const char**?

在我的Linux(和OS X)机器上,该iconv()函数具有以下原型:

size_t iconv (iconv_t, char **inbuf...
Run Code Online (Sandbox Code Playgroud)

而在FreeBSD上它看起来像这样:

size_t iconv (iconv_t, const char **inbuf...
Run Code Online (Sandbox Code Playgroud)

我希望我的C++代码能够在两个平台上构建.C编译器,传递char**用于一个const char**参数(或反之亦然)通常发射一个单纯的警告; 但是在C++中,这是一个致命的错误.因此,如果我传递一个char**,它将无法在BSD上编译,如果我传递const char**它将无法在Linux/OS X上编译.如何编写可编译在两者上的代码,而无需尝试检测平台?

我有一个(失败的)想法是提供一个覆盖标题提供的任何本地原型:

void myfunc(void) {
    size_t iconv (iconv_t, char **inbuf);
    iconv(foo, ptr);
}
Run Code Online (Sandbox Code Playgroud)

这个失败是因为iconv需要C链接,你不能放在extern "C"一个函数内(为什么不呢?)

我想出的最好的工作思路是抛出函数指针本身:

typedef void (*func_t)(iconv_t, const char **);
((func_t)(iconv))(foo, ptr);
Run Code Online (Sandbox Code Playgroud)

但这有可能掩盖其他更严重的错误.

c++ portability const

91
推荐指数
4
解决办法
5369
查看次数