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) 我有一个字符串:
b = 'week'
Run Code Online (Sandbox Code Playgroud)
我想检查最后一个字符是否为"s".如果没有,请附加"s".
这个是否有Pythonic单线程?
我启动了一个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)