我怎么能免费const char*?我分配了新内存使用malloc,当我试图释放它时,我总是收到错误"不兼容的指针类型"
导致这种情况的代码如下:
char* name="Arnold";
const char* str=(const char*)malloc(strlen(name)+1);
free(str); // error here
Run Code Online (Sandbox Code Playgroud) 为什么必须声明类成员const在构造函数初始化列表中而不是在构造函数体中初始化?
两者有什么区别?
这样的事情之间有什么区别
friend Circle copy(const Circle &);
Run Code Online (Sandbox Code Playgroud)
和这样的事情
friend Circle copy(Circle&) const;
Run Code Online (Sandbox Code Playgroud)
我知道const后,函数被用来告诉编译器这个函数不会尝试更改它被调用的对象,那么另一个呢?
在阅读时我遇到了这种类型的声明和以下行 -
const volatile char *p=(const volatile char *) 0x30;
Run Code Online (Sandbox Code Playgroud)
p的值仅由外部条件改变
我没有得到什么是外部条件.还有这种宣言的实际用途是什么?
一个相当理论的问题......为什么常量引用的行为与常量指针的行为不同,我实际上可以更改它们指向的对象?它们看起来像是另一个简单的变量声明.我为什么要用它们?这是我运行的一个简短示例,它编译并运行时没有错误:
int main (){
int i=0;
int y=1;
int&const icr=i;
icr=y; // Can change the object it is pointing to so it's not like a const pointer...
icr=99; // Can assign another value but the value is not assigned to y...
int x=9;
icr=x;
cout<<"icr: "<<icr<<", y:"<<y<<endl;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚承认了带有多个参数的方法声明的点表示法,
如下所示:
public function getURLs(URL... urls){
for(int i = 0; i < urls.length; i++){
// walk through array of arguments
}
}
Run Code Online (Sandbox Code Playgroud)
并使用这样的
getURLs(url1, url2, url3);
Run Code Online (Sandbox Code Playgroud)
这些方法参数被隐式转换为 URL[] urls
可能重复:
是否可以将数组声明为常量
是否可以在PHP中使用数组作为类常量?
即
const MYARRAY = array('123', '234');
Run Code Online (Sandbox Code Playgroud)
如果不是为什么?
可能重复:
const引用是否延长了临时的寿命?
我的编译器没有抱怨为const引用分配临时:
string foo() {
return string("123");
};
int main() {
const string& val = foo();
printf("%s\n", val.c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么?我认为返回的字符串foo是临时的,val可以指向生命周期结束的对象.C++标准是否允许这样做并延长返回对象的生命周期?
我在这里做了一个测试,但输出是一个没有结束的循环,我不知道为什么.
实际上,我正在做另一个测试,但是当我写这个时,我不明白循环是如何发生的.它反复输出"ABC".
#include <map>
#include <string>
#include <iostream>
class test
{
public:
std::map <int, int> _b;
test();
test (std::map<int, int> & im);
~test();
};
test::test()
{
std::cout<<"abc";
_b.clear();
_b[1]=1;
test(_b);
}
test::test(std::map <int, int>& im)
{
std::cout<<im[1];
}
test::~test() {};
int main ()
{
test a;
}
Run Code Online (Sandbox Code Playgroud)