为什么我不能在这里使用 QString::arg 函数?
Why can't I use QString::arg function here?
您知道在任何需要QString对象作为参数的地方都可以使用c样式字符串。例如,showMessage
函数需要QString。但是我传递了一个c风格的字符串给这个函数,一切都是好的。我的意思是这里我们可以把"%1 a sample text"
看作一个QString对象!也许!
statusBar()->showMessage("%1 a sample text");
但是为什么我们不能使用这个代码呢?
statusBar()->showMessage("%1 a sample text".arg("This is "));
因为implicit-conversion
到QString
将被使用,当传递const char[]
到功能时,没有implicit-conversion
,没有调用功能,所以,您试图在const char[]
上调用arg
方法,这是不正确的,通过
QString
statusBar()->showMessage(QString("%1 a sample text").arg("This is "));
一切都会好起来的
任何形式为"..."
的都是const char*
类型,因此不是QString
。这是c++必须与C兼容的副作用。
然而,在某些情况下(例如operator+
),允许隐式转换到QString
,因为QString
有一个接受const char*
类型形参的构造函数。然而,在这种情况下,您需要使用显式转换,即
statusBar()->showMessage(QString("%1 a sample text").arg("This is "));
相关文章:
- 将 N-arg 函数包装到另一个函数中
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 为什么不接受具有默认分配参数的函数作为 0-arg 生成器?
- 区分两个零arg构造函数的惯用方法
- 在现代 c++ 中,有什么好方法可以获取 arg 类型列表表单函数指针吗?
- 如何使用 z3 中的 arg() 函数
- 如何在数组中使用结构化绑定作为ARG传递给某些函数
- 传递variadic arg to模板函数时的汇编误差
- C++ 当函数 arg 类型为类接口时,无法传递对指针的引用
- 将数组传递给在 arg-list 中接受双指针的函数
- 'auto ... arg'的参数包形式在 lambda 中启用,但在函数中未启用?
- 解决系统函数以运行来自 vc++ 的 arg 的 bat 文件
- 为指定函数的每次出现返回带引号的字符串 arg
- 哪些 std 类型在移动构造函数中用作 arg 后保证为空/空
- C++中的Initializer列表和类初始化.我没有arg构造函数,但仍然必须使用初始值设定项列表
- 函数的参数转换,将参数作为'const arg *&'
- 不能将size_t *arg[]传递给需要void指针数组的函数
- 为什么我不能在这里使用 QString::arg 函数?
- 在这种情况下,将派生类传递到具有基类引用arg的函数中,我会得到切片吗?
- 将对象传递给var arg函数