c++ primer中几个小问题

cismylife 2009-03-14 10:13:06
1.

#include<iostream>
using namespace std;
int main()
{
int ival=1.01;
int &rval2=ival;
rval2=3.12345;//不是说只能把一个对象赋值给引用吗?
//我觉得const int &rval2=3可以。但是devc++编译器却可以编译通过此程序
getchar();
}


2.
两个string字符串对象可以相加,例如s1+s2;
但是为什么字符串也可以和单个字符相加s1+‘,';
3.
vector<string>::iterator iter;
++*iter哪错了
4.

vector<string>**pvec2=new vector<string>[10];//错的
vector<string> *pvec1=new vector<string>(10);//两者有什么区别



...全文
163 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
petera 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cismylife 的帖子:]
1.

C/C++ code
#include<iostream>
using namespace std;
int main()
{
int ival=1.01;
int &rval2=ival;
rval2=3.12345;//不是说只能把一个对象赋值给引用吗?
//我觉得const int &rval2=3可以。但是devc++编译器却可以编译通过此程序
getchar();
}
[/Quote]

引用变量rval2的初始化是指把有地址的变量赋值给它,如ival
3.12345也可以看成一个对像,但这个数在内存中没有地址,所以rval2 = 3.12345并不是改变引用的方向

tangshuiling 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cismylife 的回复:]
其实我还是不太懂这句话,尤其是=后面的那句new vector <string>[10];为什么是方括号而不是圆括号,方括号代表什么?
vector <string>**pvec2=new vector <string>[10];
还有++(*iter)相当于++string对象,string对象不是可以看成一个地址,可以自增的,例如"12344"[2];
[/Quote]

相信楼主能看懂下面的代码:
int *i=new int[20]; //申请了20个int类型的空间,由于int类型无构造函数,空间的值随机
int *i=new int(20); //申请了1个空间,空间的值为20
把int换成vector<string>再分析:
vector<string> *pvec2=new vector<string> [10]; 申请了10个vector类型的空间,同时调用vector的构造
函数10次
vector<string> *pvec2=new vector<string>(10); 申请了1个vector类型的空间,同时传递数值10调用vector
的构造函数

qq675927952 2009-03-14
  • 打赏
  • 举报
回复
vector <string>::iterator iter;
++*iter哪错了
不管什么优先级,最好是 *(++iter);
qq675927952 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 frank529 的回复:]
1、引用是别名的意思, int &rval2=ival就说明了rval2就是ival,所以rval2=3.12345相当于对ival赋值
2、应该是重载了+号

[/Quote]
up

还有
vector<string>**pvec2=new vector<string>[10];//错的
这应该改为vector<string>**pvec2=new vector<string>*[10]; 因为左边是二级指针,所以你右边就要为一级指针了,


vector<string> *pvec1=new vector<string>(10);这句话的意思,就是申请一个vector,这个vector最初分配有10元素的大小,

fairchild811 2009-03-14
  • 打赏
  • 举报
回复
运算符重载

运算符优先级
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
int ival=1.01;
int &rval2=ival;
rval2=3.12345;//不是说只能把一个对象赋值给引用吗? //我不知道说什么好,难道这样一个普通的赋值语句应该出错吗?
//我觉得const int &rval2=3可以。但是devc++编译器却可以编译通过此程序
getchar();
}



2.两个string字符串对象可以相加,例如s1+s2;
但是为什么字符串也可以和单个字符相加s1+‘,';
因为+被重载了。


3.
vector <string>::iterator iter;
++*iter哪错了

我不管什么优先级,如果觉得要出错,就*(++iter);




frank529 2009-03-14
  • 打赏
  • 举报
回复
3、iter分配空间了吗?STL不是很懂,如果你想改变指针内容,在分配了空间赋值后用++*iter可以
int* p=new int;
*p=1;
++*p;
jianshan198977 2009-03-14
  • 打赏
  • 举报
回复
1只有const 引用可以这样赋值const int &rval2=3;其他的引用这样都是错误的.
3.右结合性.++(*iter);而*iter是string对象,不能对它使用自增运算
4.
vector<string>**pvec2=new vector<string>[10];//这里pvec2是2级指针,不能把1级指针赋给它
vector<string> *pvec1=new vector<string>(10);//这里pvec2是1级指针

2级指针只能接受1级指针的地址.new vector<string>(10)返回的是1级指针
chin_chen 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cismylife 的帖子:]
vector<string>**pvec2=new vector<string>[10];//错的
vector<string> *pvec1=new vector<string>(10);//两者有什么区别

[/Quote]
第一个new出来一组对象,返回值是vector<string>*,你这样vector<string>**pvec2写肯定不对了。不能将vector<string>**付给vector<string>*

vector<string> *pvec1=new vector<string>(10);表示一个对象,里面有10个元素,每个元素为0;
其面那个是一组对象,每个对象里面没有元素!
sagegz 2009-03-14
  • 打赏
  • 举报
回复
1. rval2=3.12345;//不是说只能把一个对象赋值给引用吗?
------------------------------------------------
相当于ival=3.12345,因为rval2是ival的别名.
------------------------------------------------
2.两个string字符串对象可以相加,例如s1+s2;但是为什么字符串也可以和单个字符相加s1+‘,';
------------------------------------------------
+号重载了.
------------------------------------------------
3.应该也是重载的问题.
chenzhp 2009-03-14
  • 打赏
  • 举报
回复
2 string重载了+,其内部实现了该方式的行为
3 这是一个迭代器,访问数据就是通过迭代器自增来定位的。++*iter 这是什么逻辑?
3 new出来的都是一个一级指针,用二级指针来接受赋值,你认为有道理么?
frank529 2009-03-14
  • 打赏
  • 举报
回复
1、引用是别名的意思, int &rval2=ival就说明了rval2就是ival,所以rval2=3.12345相当于对ival赋值
2、应该是重载了+号
chin_chen 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cismylife 的帖子:]

vector <string>::iterator iter;
++*iter哪错了

[/Quote]
++的优先级高于*,所以++先和*结合,但是这样做导致出错了!
hemiya 2009-03-14
  • 打赏
  • 举报
回复
1,没明白问什么,3.12345难道不是对象么?
2,都是运算符重载的原因.
3,*(++itre)
4,**指向指针的指针,*指针
chin_chen 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cismylife 的帖子:]

2.
两个string字符串对象可以相加,例如s1+s2;
但是为什么字符串也可以和单个字符相加s1+‘,';

[/Quote]
string对+运算符进行了重定义,里面对‘’,“”这样的字符,字符串都有定义。你可以想象把‘,’转化为一个string,然后相加一样的。
chin_chen 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cismylife 的帖子:]
1.
C/C++ code#include<iostream>usingnamespacestd;intmain()
{intival=1.01;int&rval2=ival;
rval2=3.12345;//不是说只能把一个对象赋值给引用吗?//我觉得const int &rval2=3可以。但是devc++编译器却可以编译通过此程序getchar();
}

[/Quote]
int&rval2=ival;有了这句话后,rval就是ival的别名了,当然可以对它进行任何操作了,效果跟直接对ival一样
cismylife 2009-03-14
  • 打赏
  • 举报
回复
其实我还是不太懂这句话,尤其是=后面的那句new vector<string>[10];为什么是方括号而不是圆括号,方括号代表什么?
vector<string>**pvec2=new vector<string>[10];
还有++(*iter)相当于++string对象,string对象不是可以看成一个地址,可以自增的,例如"12344"[2];

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧