字符串文字可以传递给接受常量字符*的函数吗?
Can a string literal be passed to a function that takes const char*?
我需要帮助理解一些代码。
我在其他地方读到,将字符串文本作为const char*
传递是合法的。 但是,在来自 cppreference 的用户定义字符串文字的代码的最后一行中,它说没有用于"two"
的文本运算符。如果字符串文字"two"
可以传递给接受const char*
的函数,为什么会这样?
long double operator "" _w(long double);
std::string operator "" _w(const char16_t*, size_t);
unsigned operator "" _w(const char*);
int main() {
1.2_w; // calls operator "" _w(1.2L)
u"one"_w; // calls operator "" _w(u"one", 3)
12_w; // calls operator "" _w("12")
"two"_w; // error: no applicable literal operator
}
因为处理字符串的用户定义文本运算符必须有两个参数:指向字符的指针和长度(请参阅 cpp首选项链接中的第3b
节)。 您认为应该调用的示例运算符缺少此长度参数。
为了使它起作用,声明应该是
unsigned operator "" _w(const char*, size_t);
字符串文字可以传递给接受 const char* 的函数吗?
是的。
举个例子:
void foo(const char*);
foo("two"); // works
您已链接到并引用了用户定义的字符串文本的文档。用户定义的字符串文本与字符串文本是分开的。
但是在 CPPEFERENCE 针对用户定义的字符串文字的这段代码的最后一行中,它说"two"没有文字运算符。
更正:示例中没有用户定义的字符串文本_w
。"two"
是字符串文本。"two"_w
是用户定义的字符串文本,但由于示例中没有T operator "" _w(const char*, size_t)
声明,因此这是一个错误。
如果字符串文字"二"可以传递给接受 const char* 的函数,为什么会这样?
"two"
是否可以传递到函数中,const char*
与是否定义了用户定义的字符串文本完全不同。
相关文章:
- 多字符常量警告
- const_cast<字符 *>(字符* 常量) 不是左值?
- 常量字符数组模板与字符常量* 函数重载
- 如何检查字符常量是否符合ASCII
- 从字符串数组转换为字符* 常量
- 字符常量或字符串常量
- 字符常量数组为空,即使已为其赋值 [C++]
- 如何创建 ' 字符常量
- 如何编写完全可移植的 4 字节字符常量的编译时初始化
- 我得到以下错误:[警告]多字符字符常量
- C++错误:警告:多字符字符常量/a用于用法
- 字符常量和函数名称的 sizeof() 背后的逻辑
- 如何在 C 中将多字符常量转换为整数
- C++ wifstream:不兼容的字符常量*,wchar_t康斯特*类型
- 不允许从"常量无符号字符*常量*"到"常量字符*常量*"static_cast
- 修改字符 *常量字符串
- 为什么字符常量/文字不能为空?
- C++字符 * 常量与字符 *,为什么有时一个有时另一个
- 警告多字符字符常量 [-Wmultichar]
- 开关语句多字符常量