奇怪的string

代码1:

 1 #include <iostream>
 2 //#include <string>
 3 using namespace std;
 4
 5 int main(int argc, char **argv)
 6 {
 7     string s = "hello world!";
 8     //cout << s << endl;
 9     return 0;
10 }

这段代码仅仅是定义了string,而没有使用它,可以编译通过,正常运行。推测原因是:间接包含了string的定义,因此仅仅用来定义是可以的,但是有点讲不通的是,一般这种类似于预定义的情况,只能定义该类型的指针或者引用。不能定义它本身的变量的。所以,此处是疑问1.

代码2:

 1 #include <iostream>
 2 //#include <string>
 3 using namespace std;
 4
 5 int main(int argc, char **argv)
 6 {
 7     string s = "hello world!";
 8     cout << s << endl;
 9     return 0;
10 }

这段代码编译不过。我的理解是,使用了此变量,但是没哟包含头文件,所以编译不过很合理,但是结合下一段代码来看,就有点奇怪了。

代码3:

 1 #include <iostream>
 2 //#include <string>
 3 using namespace std;
 4
 5 int main(int argc, char **argv)
 6 {
 7     string s = "hello world!";
 8     cout << s.c_str() << endl;
 9     return 0;
10 }

这段代码可以编译过并正常执行。这里与上一段代码唯一的区别就是输出时先将string转换为了字符串类型。这里是疑问2.

代码4:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4
 5 int main(int argc, char **argv)
 6 {
 7     string s = "hello world!";
 8     cout << s << endl;
 9     return 0;
10 }

这段代码可以编译通过并正常执行。这里结果也是在意料之中的。

综合上面的几种情况,对string的使用还是有一些疑问的,虽然不影响正常使用,但是还是喜欢钻一钻这个问题,打破砂锅问到底。现在自己的知识还解释不了这个问题,只能待自己慢慢积累了。

加油吧,少年!

时间: 2024-07-28 17:44:50

奇怪的string的相关文章

在java中string为什么要设计成final的

各种不同的理解 1 将方法或类声明为final主要目的是:确保它们不会再子类中改变语义.String类是final类,这意味着不允许任何人定义String的子类.换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象.——<Java核心技术 卷I> 2 举个例子:一个方法可能本来接受String类型并返回其大写方式 public static String uppperString(String s){ return s.toUpperCase();

为什么jdk中把String类设计成final

为什么jdk中把String类设计成final? 最佳答案: 主要是为了"效率" 和 "安全性" 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final. 其它答案一: String和其他基本类型不同,他是个对象类型.既然是对象类型,如果是在静态方法下是必须调用静态方法或值的,如果是非静态的方法,就必须要实例化. main函数是个static的.所以String要能像其他的基本类型一样直接被调用.这也是

JavaScript包装对象(转)

转自:http://www.cnblogs.com/dolphinX/p/3280340.html JavaScript是面向对象的语言,使用”.”操作符可以访问对象的属性和方法,而对于基本类型(null, undefined, bool, number, string)应该是值类型,没有属性和方法,然而 var s='this is a string'; alert(s.length); alert(s.indexOf('is')); 结果很简单,但是仔细想想还真奇怪,string不是值类型吗

【vijos】1789 String(组合计数+奇怪的题)

https://vijos.org/p/1789 我yy了一下发现我的方法没错啊,为嘛才80分.. 当n=k的时候,显然这是个排列就能做的,枚举一半必定有且只有一个另一半与之对应,所以直接做就行了. 当k是奇数的时候,我们可以假设有一个奇数长的模型,每一次向右移动一个,显然最前边和最后边.此前边和次后边以此类推,他们都是相等的,也就是说,这个序列一定由两个元素组成(可以相同)那么显然有m*m种方法 当k是偶数的时候,根据前边的分析,显然只有m种序列(每一种序列的元素是一模一样的) 我觉得这是对的

第7题:奇怪的国家&amp;第8题:字符串长度

第7题:奇怪的国家 有一个奇怪的国家,里面的国民对于事情的态度永远只有两面.当两个人遇到一起讨论一个事情的时候--两个持赞同观点的人遇到一起后会对这个事情都继续赞同:一个持赞同观点的人遇到一个持不赞同观点的人的时候,两人都会不再继续赞同:两个持不赞同观点的人遇到一起讨论后反而会对这个事情开始赞同. 输入包括两行,每行包括N个数字(1≤N≤50),分别表示两个人对于N个事情对应的看法--0表示不赞同.1表示赞同. 输出包括一行,包括N个数字,表示两人相遇后,对于这N件事情的最终看法. 样例输入 1

老司机的奇怪noip模拟T1-guanyu

1. 关羽(guanyu.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的关羽虐人.进入了八人身份局,作为一位主公,xpp 果断选了关羽,用关羽挑 7 人.xpp 为什么喜欢关羽这个武将呢?因为武圣是个很牛逼的技能.武圣——你可以将你的任意一张红桃或方片牌当杀使用或打出.可见武圣这个技能如果用得好那么是可以轻松杀死别人的. 于是 xpp

MongoDB string字段索引策略总结

在学习MongoDB的索引时发现一个奇怪的问题,给一个string类型的field设置text索引,但是在查询的时候并没有使用索引.比如: db.tomcat_access_logs.ensureIndex( { url : 'text' }); db.tomcat_access.logs.find( { url : '1' } ).explain(); db.tomcat_access_logs.find( { url : /1/ } ).explain(); { "cursor"

【Java基础】关于String的总结

String构造方法初始化和常量赋值初始化区别 下面的代码是一个String对象的两种不同的初始化方式,关于这两种不同初始化方式的区别,本文通过画内存图来进行解释,首先代码如下: public class Test { public static void main(String[] args) { String s1 = new String("hello"); String s2 = "hello"; System.out.println(s1 == s2);

Lua的string和string库总结

Lua有7种数据类型,分别是nil.boolean.number.string.table.function.userdata.这里我总结一下Lua的string类型和string库,复习一下,以便加深记忆. 个人认为string是Lua编程使用数据结构的时候,重要性仅次于table的类型.十分重要! 一.string基础. Lua并没有字符类型,Lua的string类型表示字符序列.所以,长度为1的string就表示了单个字符.Lua的字符类型有这些特征: 1.string字符序列中的字符采用