c++也支持这样的用法?
c++吧
全部回复
仅看楼主
level 11
gameloftyou
楼主
cout<<string("a string")<<flush;
没想到string("a string")这货不加new也行,是匿名对象?动态的还是静态的?
2012年07月22日 12点07分
1
level 12
Padme0Amidala
楼主火星了…具体不了解请找标准帝
2012年07月22日 12点07分
2
gameloftyou
我c++primer才看到顺序容器
2012年07月22日 12点07分
level 10
风之追梦者
目测C
#毒害。。。我刚学完C#
再回过来写C++经常这样。。。
2012年07月22日 12点07分
3
gameloftyou
呵呵,我是python毒害的,c#还没学
2012年07月22日 12点07分
飞翔的天地
C#构造结构体类型也要显式的写new,构造时机可控,C++则要求定义实例后就必须进入有效状态,可以说各有利弊
2012年07月22日 13点07分
level 7
蓝色的孤鹰
楼主请看
2012年07月22日 13点07分
4
level 15
幻の上帝
临时对象。
2012年07月22日 13点07分
5
gameloftyou
哦,谢了
。
2012年07月22日 13点07分
蓝色的孤鹰
怎么解释?
2012年07月22日 14点07分
level 7
蓝色的孤鹰
你这样做实际上就是调用
std::..............basic_string(const char* ptr)这个函数。
2012年07月22日 13点07分
6
gameloftyou
好吧
2012年07月22日 14点07分
level 1
myself_2025
你这个不就是调用构造函数么
2012年07月22日 13点07分
7
level 11
yjf_victor
先看看这个
#include <string>
using namespace std;
string a = string("a string");
cout << a << endl;
然后你就能理解了
2012年07月22日 14点07分
8
蓝色的孤鹰
返回一个string类型对象……,不难理解了
2012年07月22日 14点07分
gameloftyou
为什么cout<<new string("a string")<<endl;打印出来却是地址? 另外这个new string("a string")是不是就是匿名对象,打印完之后也不会回收,直到程序运行结束?
2012年07月22日 14点07分
🐯多🐯
@gameloftyou
传给指针的不是地址是啥……
2012年07月22日 14点07分
yjf_victor
@gameloftyou
为什么老想这用“new”?受Java的影响?C++的new跟Java的new的意思完全不一样。C++的new是分配内存,调用构造函数,并返回一个地址,赋值给指针。
2012年07月22日 14点07分
level 11
yjf_victor
@gameloftyou
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string a = string("a string"); // 一个类的对象
cout << a << endl; // 输出"a string"
string * b = new string("a string"); // 一个类的对象的指针
cout << *b << endl; // 输出"a string"
return 0;
}
2012年07月22日 14点07分
9
level 11
yjf_victor
@gameloftyou
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string a = string("a string"); // 一个类的对象
cout << a << endl; // 输出"a string"
string * b = new string("a string"); // 一个类的对象的指针
cout << *b << endl; // 输出"a string"
delete b; // 解除指针b指向的string对象,释放内存,楼上刚才漏了这一步
return 0;
}
2012年07月22日 14点07分
10
gameloftyou
哦,我有点明白了,不过同样是变量a和b,它们对应的内存数据是对象还是指针又是如何区分的呢
2012年07月22日 14点07分
yjf_victor
@gameloftyou
没看见b的定义(string * b)多了一个代表指针的星号吗?
2012年07月22日 14点07分
gameloftyou
@yjf_victor
我不是问定义是的区别,我是想说是不是内存上也有些bit是来标志内存上一段的数据类型的。
2012年07月22日 14点07分
yjf_victor
@gameloftyou
要是从机器层面上看,是无法区分的,没有任何标记,直接混为一谭。
2012年07月22日 14点07分
level 12
飞翔的天地
初接触C++吗?
建议别接触指针,这么写:
auto a = make_shared<string>("a string");
cout << *a << endl;
除了*a、a->这些一点语法上的差别外,与java也没多少不同了
2012年07月22日 14点07分
11
gameloftyou
嗯,我c++primer才看到关联容器。
2012年07月22日 14点07分
风之追梦者
这玩意解决了循环引用的问题了么???
2012年07月23日 04点07分
飞翔的天地
@风之追梦者
只要用了引用计数就必然有循环引用问题。有弱引用weak_ptr,不过除了写某些特定的代码(循环链表
)一般很少遇到
2012年07月23日 04点07分
风之追梦者
@飞翔的天地
表示用C#时经常在下级节点储存上级引用已成习惯。。。
2012年07月23日 04点07分
level 9
看海的木偶
c++很强大
2012年07月22日 14点07分
12
level 12
v2abcd
光看贴吧等级不像是能问出这种问题的人啊
2012年07月22日 15点07分
13
gameloftyou
我就一刚学c++的水*
,等级什么的水多了自然会有的。
2012年07月22日 15点07分
yjf_victor
@gameloftyou
居然等级都到8cm了,我才7cm呢!。。。。。。。
2012年07月23日 04点07分
gameloftyou
@yjf_victor
我马上就要水到 9CM 了
2012年07月23日 04点07分
yjf_victor
@gameloftyou
2012年07月23日 04点07分
level 11
jerryshi2008
好强大的C++啊!!
2012年07月23日 04点07分
14
蓝色的孤鹰
非然也
2012年07月24日 15点07分
level 11
Saingel
lz
以为cpp和c#一样么
2012年07月25日 00点07分
15
level 6
O子弹O_O
楼上,刚接触C++看vs2010提示会疯掉的……
2012年07月25日 01点07分
16
level 6
O子弹O_O
new是运算符,不是关键字。
2012年07月25日 01点07分
17
level 1
sayhelloyo
生成一个临时的string对象
2012年07月25日 02点07分
18
1