C++如何知道"引号"之间的任何东西是std :: string?

deq*_*yra 3 c++ string

这可能是偏离主题的,因为没有代码,没有输出,没有任何东西,但是这里.

我看到C++可以知道的唯一途径"this"std::string是因为引号是一个语言结构,很像char单引号之间.
但如果它是真正的答案,我会感到非常惊讶:这是否意味着std::stringC++必须在引号之间解释文本?那么标准的lib不仅仅是一个扩展,而是C++的一部分.
如果我想开发自己的MyString类,并且我想MyStrings使用引号在运行中创建该怎么办?我能够做到这一点还是""语法不可避免地与std::string?相关联?
我还想过""成为一个运算符(毕竟C++有operator()),但我找不到任何关于它的东西.

Rak*_*111 6

让我们澄清一些误解.字符串文字的类型是a const char[],而不是 a std::string.例如,类型"this"将是const char[5](有一个空终止符).

这是否意味着std::stringC++必须在引号之间解释文本?

不(不是std::string)并且utf-8字符串和宽字符串有多个前缀,例如L"wide".

那么标准的lib不仅仅是一个扩展,而是C++的一部分.

这是真的,但不适用于字符串文字.你的类型nullptrstd::nullptr_t.还有std::byte标准的特殊待遇.一个std::initializer_list构造函数使用列表初始化时选择.结果sizeof是a std::size_ttypeid它是a std::type_info.可能还有其他我现在想不到的.

我能够做到这一点还是""语法不可避免地与std::string

它不是std::string,但是,那是不可能的.但是,您可以定义用户定义的文字.std::string有一个:

using namespace std::string_literals;
auto string = "this"s;

static_assert(std::is_same_v<decltype(string), std::string>); // ok
Run Code Online (Sandbox Code Playgroud)