代码1:

 #include <iostream>
//#include <string>
using namespace std; int main(int argc, char **argv)
{
string s = "hello world!";
//cout << s << endl;
return ;
}

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

代码2:

 #include <iostream>
//#include <string>
using namespace std; int main(int argc, char **argv)
{
string s = "hello world!";
cout << s << endl;
return ;
}

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

代码3:

 #include <iostream>
//#include <string>
using namespace std; int main(int argc, char **argv)
{
string s = "hello world!";
cout << s.c_str() << endl;
return ;
}

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

代码4:

 #include <iostream>
#include <string>
using namespace std; int main(int argc, char **argv)
{
string s = "hello world!";
cout << s << endl;
return ;
}

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

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

加油吧,少年!

奇怪的string的更多相关文章

  1. java的String类型为什么是final

    (转自:http://www.cnblogs.com/ikuman/archive/2013/08/27/3284410.html) 最佳答案: 主要是为了“效率” 和 “安全性” 的缘故.若 Str ...

  2. nodejs的 new String

    已知rwo4的记录中baitaiid是001// row4为jhlist开始循环结果 for(var i=0;i<row4.length;i++) { var baiTaiId=new Stri ...

  3. String被设计成不可变和不能被继承的原因

    String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类 ...

  4. java问题解读,String类为什么是final的

    一.理解final 望文生义,final意为“最终的,最后的”,我理解为“不能被改变的”,它可以修饰类.变量和方法. 所以我是否可以理解为被它所修饰的类.变量和方法都不能被改变呢?答案是”是“,因为有 ...

  5. JavaScript包装对象

    JavaScript是面向对象的语言,使用”.”操作符可以访问对象的属性和方法,而对于基本类型(null, undefined, bool, number, string)应该是值类型,没有属性和方法 ...

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

    https://vijos.org/p/1789 我yy了一下发现我的方法没错啊,为嘛才80分..(后来看了题解,噗,还要判断k>n和k=1的情况QAQ 当k=1的时候,答案显然是m^n 当k& ...

  7. String 是一个奇怪的引用类型

    开局两张图,内容全靠刷! 马甲哥看到这样的现象,一开始还是有点懵逼. 这个例子,string是纯粹的引用类型,但是在函数传值时类似于值传递: 我之前给前后示例的内存变化图吧: 根因就是大多数高级语言都 ...

  8. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  9. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

随机推荐

  1. CorelDRAW和Illustrator比较, 9 CorelDRAW Graphics Alternatives

    至于要不要学Illustrator,完全凭个人意愿.如果你精通Coreldraw,学不学都一样.因为二者几乎可以完全替代. CDR:是一个纯图形设计软件.排版比其他二个软件好用. 一般来讲CDR更适合 ...

  2. [转]Using the Microsoft Connector for Oracle by Attunity with SQL Server 2008 Integration Services

    本文转自:http://technet.microsoft.com/en-us/library/ee470675(v=sql.100).aspx SQL Server Technical Articl ...

  3. iOS:自动读取图片插件KSImageNamed-Xcode-master的使用

    gitHub链接:https://github.com/ksuther/KSImageNamed-Xcode   KSImageNamed-Xcode是一个Xcode插件,可以帮助开发者在Xcode中 ...

  4. saltstack之mount和umount的用法

    线上很多服务器都需要挂载存储上的公共目录,并实现开机启动(/etc/fstab),比如web的静态文件共享目录,日志远程集中收集等. 一.批量挂载部分. 1.在node1上配置nfs服务器,有关nfs ...

  5. linux中断流程详解

    异常体系比较复杂,但是linux已经准备了很多的函数和框架,但是因为中断是和具体的开发板相关,所以中断需要我们自己来处理一些方面,但是这也是很少的一部分,很多公用的处理函数内核已经实现,linux内核 ...

  6. http://www.blogjava.net/zJun/archive/2006/06/28/55511.html

    http://www.blogjava.net/zJun/archive/2006/06/28/55511.html http://www.cnblogs.com/alipayhutu/archive ...

  7. linux中backticks反引号的作用

    This is a backtick. A backtick is not a quotation sign. It has a very special meaning. Everything yo ...

  8. shorthand trick with boolean expressions

    https://stackoverflow.com/questions/2802055/what-does-the-construct-x-x-y-mean --------------------- ...

  9. 我为什么选择ANGULAR 2?

    没有选择是痛苦的,有太多的选择却更加痛苦.而后者正是目前前端领域的真实写照.新的框架层出不穷: 它难吗?它写得快吗?可维护性怎样?运行性能如何?社区如何?前景怎样?好就业吗?好招人吗?组建团队容易吗? ...

  10. mui 页面传值

    点击第一个页面的标签,跳转到第二个页面,把第一个页面的值也传往目标页面 现在提供两种实现方式 注意:需要在手机运行才可以,用电脑浏览器可能不支持. 第一种方式  页面已创建,通过自定义事件传值 fir ...