小编Sil*_*cer的帖子

使用委托构造函数时的成员初始化

我已经开始尝试C++ 11标准,我发现这个问题描述了如何从同一个类中的另一个ctor调用你的ctor以避免使用init方法等.现在我正在使用看起来像这样的代码尝试相同的事情:

HPP:

class Tokenizer
{
public:
  Tokenizer();
  Tokenizer(std::stringstream *lines);
  virtual ~Tokenizer() {};
private:
  std::stringstream *lines;
};
Run Code Online (Sandbox Code Playgroud)

CPP:

Tokenizer::Tokenizer()
  : expected('=')
{
}

Tokenizer::Tokenizer(std::stringstream *lines)
  : Tokenizer(),
    lines(lines)
{
}
Run Code Online (Sandbox Code Playgroud)

但是这给了我错误: In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’: /path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation我已经尝试先移动Tokenizer()部分,然后在列表中移动,但这并没有帮助.

这背后的原因是什么,我应该如何解决?我尝试lines(lines)this->lines = lines;相反的方式移动到身体,它工作正常.但我真的希望能够使用初始化列表.

提前致谢!

c++ gcc ctor-initializer c++11

87
推荐指数
1
解决办法
3万
查看次数

在C中挑起堆栈下溢

我想在C函数中引发堆栈下溢,以测试我系统中的安全措施.我可以使用内联汇编程序来完成此操作.但是C会更便携.但是,我无法想到使用C引发堆栈下溢的方法,因为堆栈内存在这方面由语言安全地处理.

那么,有没有办法使用C激发堆栈下溢(不使用内联汇编程序)?

如注释中所述:堆栈下溢意味着使堆栈指针指向堆栈开头下方的地址(堆栈从低到高的架构"下方").

c stack stackunderflow

26
推荐指数
6
解决办法
6972
查看次数

我的信号/插槽连接不起作用

我反复看到有人没有调用插槽的问题.我想收集一些最常见的原因.所以也许我可以帮助别人并避免许多多余的问题.

信号/插槽连接不起作用的原因是什么?如何避免这些问题?

qt signals-slots qt-signals qt-connection qt-slot

19
推荐指数
1
解决办法
1万
查看次数

具有不一致排序推导的三向比较运算符

前段时间我定义了我的第一个三向比较运算符。它比较了单一类型并取代了多个常规运算符。很棒的功能。然后我尝试实现一个类似的运算符来通过委托比较两个变体:

auto operator <=> (const QVariant& l, const QVariant& r)
{   
   switch (l.type())
   {
      case QMetaType::Int:
         return l.toInt() <=> r.toInt();
      case QMetaType::Double:
         return l.toDouble() <=> r.toDouble();
      default:
         throw;
   }
}
Run Code Online (Sandbox Code Playgroud)

这不能编译,我收到错误

自动返回类型的不一致扣除:“std::strong_ordering”然后是“std::partial_ordering”。

显然intdouble飞船运营商返回的类型不同。

解决这个问题的正确方法是什么?

c++ qt spaceship-operator return-type-deduction c++20

18
推荐指数
2
解决办法
866
查看次数

添加注释/备注到.gitattributes

是否可以在.gitattributes文件中添加注释或备注?

如果是,注释行的确如何?

git comments gitattributes

17
推荐指数
2
解决办法
2076
查看次数

在QObject派生类中重复Q_DISABLE_COPY

在Qt中有一个宏允许为类声明私有拷贝构造函数和赋值运算符:http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#Q_DISABLE_COPY

据说这个宏应该用于所有QObject(尤其是QWidget)派生类.

我理解这是如何工作的以及为什么它有用.

我不明白:有什么理由在我的QObject派生类中重复Q_DISABLE_COPY而QObject已经包含Q_DISABLE_COPY并且通过这有效地防止了我的派生类被复制了吗?

c++ qt noncopyable qobject qt5

16
推荐指数
1
解决办法
8177
查看次数

cuda上的128位整数?

我刚刚设法在Linux Ubuntu 10.04下安装我的cuda SDK.我的显卡是NVIDIA geForce GT 425M,我想用它来解决一些繁重的计算问题.我想知道的是:有没有办法使用一些无符号的128位int var?当使用gcc在CPU上运行我的程序时,我使用的是__uint128_t类型,但是将它与cuda一起使用似乎不起作用.在cuda上有128位整数可以做些什么吗?

非常感谢Matteo Monti Msoft编程

integer cuda nvidia 128-bit

13
推荐指数
2
解决办法
1万
查看次数

QString :: arg()在占位符后面带有数字

我想在字符串上使用.arg().这是一个例子:

qDebug() << QString("%11%2").arg(66).arg(77);
Run Code Online (Sandbox Code Playgroud)

我想得到输出,66177但当然这不是实际输出,因为%11被解释为占位符#11而不是占位符#1后跟一个文字1.

有没有比以下更好的解决方案?

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77);
Run Code Online (Sandbox Code Playgroud)

qstring qt

8
推荐指数
1
解决办法
551
查看次数

将带有百分比编码的QUrl转换为字符串

我使用用户输入的URL作为文本来初始化QUrl对象.后来我想将QUrl转换回字符串以显示它并使用正则表达式进行检查.只要用户没有输入任何百分比编码的URL,这就可以正常工作.

为什么以下示例代码不起作用?

qDebug() << QUrl("http://test.com/query?q=%2B%2Be%3Axyz%2Fen").toDisplayString(QUrl::FullyDecoded); 
Run Code Online (Sandbox Code Playgroud)

它根本不解码任何百分比编码的字符.它应该打印"http://test.com/query?q=++e:xyz/en"但实际打印"http://test.com/query?q=%2B%2Be%3Axyz%2Fen".

我还尝试了许多其他方法,如fromUserInput(),但我无法在Qt5.3中使代码正常工作.

有人可以解释我如何做到这一点,以及为什么上面的代码不起作用(即显示解码的URL),即使使用QUrl :: FullyDecoded?

UPDATE

获取fromPercentEncoding()提示后,我尝试了以下代码:

QUrl UrlFromUserInput(const QString& input)
{
   QByteArray latin = input.toLatin1();
   QByteArray utf8 = input.toUtf8();
   if (latin != utf8)
   {
      // URL string containing unicode characters (no percent encoding expected)
      return QUrl::fromUserInput(input);
   }
   else
   {
      // URL string containing ASCII characters only (assume possible %-encoding)
      return QUrl::fromUserInput(QUrl::fromPercentEncoding(input.toLatin1()));
   }
}
Run Code Online (Sandbox Code Playgroud)

这允许用户输入unicode URL和百分比编码的URL,并且可以解码这两种URL以进行显示/匹配.但是,百分比编码的URL在QWebView中不起作用... Web服务器响应不同(它返回了不同的页面).很明显,QUrl :: fromPercentEncoding()不是一个干净的解决方案,因为它有效地改变了URL.我可以在上面的函数中创建两个QUrl对象...一个直接构造,一个使用fromPercentEncoding()构建,第一个用于QWebView,后者仅用于显示/匹配......但这看起来很荒谬.

qstring qt urlencode qurl

7
推荐指数
1
解决办法
1万
查看次数

使用Qt/MySQL批处理模式时的性能

我正在使用Qt 5.3.1(Win 7,VS2013)的SQL模块将数据插入到MySQL 5.6数据库中.在我注意到一些性能问题后,我执行了三个测试代码片段并测量了它们的运行时间,以便更好地理解SQL性能.结果令人困惑.

为了测试,我使用了一个"测试"表,其中包含VARCHAR列"test"和每行唯一递增的id.

第一个片段看起来基本上是这样的:

const QString uploadQueryString("INSERT INTO test (test) VALUES ('%1')");
for (int i=0; i<1000; i++)
{
   QSqlQuery uploadQuery(uploadQueryString.arg("A: test text"), dataBase);
   if (uploadQuery.lastError().isValid())
   {
      qDebug() << tr("Query execution failed (%1)").arg(uploadQuery.lastError().text());
   }
}
Run Code Online (Sandbox Code Playgroud)

第二个是这样的:

const QString uploadQueryString("INSERT INTO test (test) VALUES %1");

QStringList values;
for (int j=0; j<1000; j++)
{
   values.append("\"B: test text\"");
}

QString valuesString = "("+ContainerToString(values, "), (")+")";

QSqlQuery uploadQuery(uploadQueryString.arg(valuesString), dataBase);
if (uploadQuery.lastError().isValid())
{
   qDebug() << tr("Query execution failed (%1)").arg(uploadQuery.lastError().text());
}
Run Code Online (Sandbox Code Playgroud)

第三个是这样的:

const QString uploadQueryString("INSERT …
Run Code Online (Sandbox Code Playgroud)

mysql sql qt database-performance

7
推荐指数
1
解决办法
1748
查看次数