Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当您声明了一个using时,为什么需要使用include? 我正在学习C++,我一直在思考为什么会这样。此代码将完美地编译和运行,但是如果我不注释 /cOUT_C++_String_Include_Std_Using - Fatal编程技术网

当您声明了一个using时,为什么需要使用include? 我正在学习C++,我一直在思考为什么会这样。此代码将完美地编译和运行,但是如果我不注释 /cOUT

当您声明了一个using时,为什么需要使用include? 我正在学习C++,我一直在思考为什么会这样。此代码将完美地编译和运行,但是如果我不注释 /cOUT,c++,string,include,std,using,C++,String,Include,Std,Using,,当您的代码>包含< /COD>时,它就要包括头,包括它所需要的任何其他标题和结果声明和定义。C++标准不禁止它,包括提供所需功能的严格必要性。显然,在您的编译器/版本中,#include也包含了足够多的字符串相关定义,从而知道有一个模板std::basic_string::basic_string(const char*)构造函数(std::string是一个typedef,用于char的basic_string的特定实例化),因此您的代码已知有效: string foo = "tempora

,当您的代码>包含< /COD>时,它就要包括头,包括它所需要的任何其他标题和结果声明和定义。C++标准不禁止它,包括提供所需功能的严格必要性。显然,在您的编译器/版本中,
#include
也包含了足够多的
字符串
相关定义,从而知道有一个
模板std::basic_string::basic_string(const char*)构造函数(
std::string
是一个
typedef
,用于
char
basic_string
的特定实例化),因此您的代码已知有效:

string foo = "temporary";

但是,当您转到stream
foo
时,它显然没有看到符合§21.3[string.classes]的标准库文档的匹配定义ala
模板std::ostream&operator,使用字符串类、其成员、运算符重载等时,需要包含
。如果您自己的设备或包含所述设备的其他报头使用不同的报头,则除非有文件证明,否则该报头不符合标准(包括
)。您使用的插入运算符在§21.4.8.9[string.io]中有描述,但最终相同的规则适用:include

通过避免使用插入器重载,您可以推测在不包含
的情况下允许编译成功的原因。可能
std::basic_string
的运算符重载是以一种方式包含的,而不是简单地在实现中包含


然而,这种猜测最终没有什么不同。这就是一切:投机。归根结底,您的代码不是格式良好的,因为您没有遵循标准的规则,谢天谢地,在这种情况下,这些规则是可以寻址的。

Idk,如果您可以依赖
std::string
包含在
中。另外,不要像那样污染全局名称空间。使用
std::
。您的程序已经格式不正确,因为您没有包含
头。当你在C++中犯错误时,你不会总是得到诊断,但是你只能声称你的程序“工作”如果你不犯错误。C++的规则完全不能由编译器强制执行。可能是因为你使用VC++编译器:代码似乎在IDENON中工作,而不是在VS++中的项目中。有什么解释吗?是因为不同的编译器行为不同吗?人们可能会认为应该有一些标准:3@Caresi众所周知,微软遵循C++标准是坏的,但是如果你要使用它,你应该明确地包含<代码> <代码>。我想你的意思是:谢谢你的建设性回答!已经澄清了很多。@Caresi:是的-或者-我推荐cppreference.com而不是cplusplus.com-它们在描述不同版本标准的要求时往往更准确。谢谢!cplusplus.com是谷歌建议最多的网站,所以谢谢你的提示!C++学习起来很有趣,也很令人沮丧:D@Caresi:不客气。我希望对你来说,乐趣大于挫折。你做得越好,它就越令人满意——而且总是有很多事情要做得更好。干杯
string foo = "temporary";