我正在为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它指向的......但是,我不确定.我很感激,如果有人知道肯定可以证实这一点,或者如果我弄错了就纠正我.谢谢!
int main( const int argc , const char[] const argv)
Run Code Online (Sandbox Code Playgroud)
正如有效的C++第3项规定"尽可能使用const",我开始思考"为什么不制作这些'常数'参数const"?
是否存在argc在程序中修改值的任何情况?
我正在尝试确定是否存在constGolang 名称的命名约定.
我个人倾向于遵循C风格并以大写形式编写它们,但我在这个页面上找不到任何内容http://golang.org/doc/effective_go.html这似乎列出了该语言的一些命名约定.
我只需要字典或关联数组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) #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值?
有没有办法按值捕获,并使捕获的值非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) const int* const Method3(const int* const&) const;
Run Code Online (Sandbox Code Playgroud)
有人可以解释每个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) 是什么区别const和final关键字飞镖?
在我的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)
但这有可能掩盖其他更严重的错误.