sch*_*312 2 c++ string overloading concatenation
我知道operator + for std::string不会因为两个而超载const char*.从而,
std::string str = "Hello" + " World";
Run Code Online (Sandbox Code Playgroud)
不起作用; 然而,以下代码完美无缺.
std::string hello = "Hello";
std::string str = hello + " World";
Run Code Online (Sandbox Code Playgroud)
而且,静态字符串连接(没有+运算符)也可以正常工作
std::string str = "Hello" " World";
Run Code Online (Sandbox Code Playgroud)
没有运营商+两个人的技术原因是什么const char*?
没有这样的运算符的技术原因集中在所有权(拥有此运算符?std::string,全局命名空间或其他东西),添加两个const char*指针没有任何意义的事实,以及其他以读取属性为中心的问题只有NUL终止的字符文字.
"Hello" + " World"什么都不知道它将被分配给什么.使用它+需要const char[]文字衰减到const char*指针.添加两个指针完全没有意义,因此现代编译器将发出+未针对const char[]类型定义的诊断说明.
"Hello" " World"是C-idiomatic字符串文字串联语法.这种情况自20世纪70年代以来一直存在,并且当每行代码只有80个左右的字符可见时,帮助民间写长字符串.
hello + " World"正在使用重载 +运算符std::string.那是因为hello是std::string.
从C++ 14日起,你就可以利用用户定义的文字与
std::string str = "Hello"s + " World";
Run Code Online (Sandbox Code Playgroud)
甚至
std::string str = ""s + "Hello" + " World";
Run Code Online (Sandbox Code Playgroud)
注意后缀s.