小编rem*_*s4e的帖子

std ::在lambda中使用std :: shared_ptr移动

std::shared_ptr在lambdas中移动s 时我有一个奇怪的问题.我不确定它是否是一个bug,因为我可以用g ++ v6.3和clang ++ v3.9重现.

当我编译并运行以下程序时:

#include <iostream>
#include <memory>

void f(std::shared_ptr<int> ptr) {
  std::cout << 3 << " " << ptr.get() << std::endl;
}

int main() {
  auto ptr = std::make_shared<int>(42);
  std::cout << 1 << " " << ptr.get() << std::endl;
#ifdef LAMBDA
  auto lambda = [ptr]() {
#endif
    f(std::move(ptr));
    std::cout << 2 << " " << ptr.get() << std::endl;
#ifdef LAMBDA
  };
  lambda();
#endif
}
Run Code Online (Sandbox Code Playgroud)

用命令c++ -std=c++14 -o test main.cpp && ./test产生类似的东西

1 0x55a49e601c30 …
Run Code Online (Sandbox Code Playgroud)

lambda move shared-ptr c++11 c++14

5
推荐指数
1
解决办法
1878
查看次数

大多数Pythonic和有效的方法在字符串末尾插入字符,如果还没有

我有一个字符串:

b = 'week'
Run Code Online (Sandbox Code Playgroud)

我想检查最后一个字符是否为"s".如果没有,请附加"s".

这个是否有Pythonic单线程?

python string

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

在Qt5中从std :: stod()和QString :: toDouble()获取不同的值

我启动了一个Qt项目并将其链接到我编写的一些C++代码来解析文件.此代码使用std :: stod()来解析double值,并且在普通的c ++项目中工作正常,但是当与Qt应用程序一起使用时,std :: stod()仅返回数字的整数部分.

我编写并运行了一些测试代码,一个用g ++ 6.1编译,另一个用qmake 5.6和相同的g ++编写.结果与我的项目结果相同.

用g ++编译的代码:

#include <iostream>

int main(int argc, char ** argv)
{
  const std::string number("3.14");
  double dbl = std::stod(number);

  std::cout << dbl << '\n'; // 3.14

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它显示了良好的价值: 3.14

用Qt编译的代码:

#include <QCoreApplication>
#include <QDebug>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    const std::string snumber("3.14");
    const QString qnumber = QString::fromStdString("3.14");

    double std_d = std::stod(snumber);
    double qt_d  = qnumber.toDouble();

    qDebug() << std_d << qt_d;                 // 3 …
Run Code Online (Sandbox Code Playgroud)

floating-point double qt c++11

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

标签 统计

c++11 ×2

c++14 ×1

double ×1

floating-point ×1

lambda ×1

move ×1

python ×1

qt ×1

shared-ptr ×1

string ×1