【发布时间】:2022-01-26 06:31:07
【问题描述】:
当我阅读cppref 中的codecvt 示例时,我注意到了这一行:
std::string data = reinterpret_cast<const char*>(+u8"z\u00df\u6c34\U0001f34c");
知道u8 之前的+ 是什么吗?因为我删除了它,结果没有任何改变。
【问题讨论】:
-
cppreference 上的示例可能是在使用早期 C++ 标准时编写的。我不知道,但也许自 C++11 以来情况发生了变化?
-
@AdrianMole 我认为问题从 C++20 开始,其中
u8是char8_t。然后将char8_t[N]从字符串文字转换为char*将无效。所以它首先使用+将其转换为char8_t*。虽然编译器用类似的行为编译它,但也许它是没有+的UB。 -
...在这种情况下,建议的副本可能是正确的?
-
...但我几乎没有足够的信心将这个作为副本关闭! (这把锤子意味着——理论上——我是 C++ 专家;然而,这也意味着我很小心单方面结束问题!!)