我正在尝试用更轻的替代品( / )QString来代替重的类别。问题是 Qt 小部件无论如何都不会使用这些类。例如,该方法需要作为输入参数,使我的改进毫无用处。QStringRefQStringViewQLabel::setTextconst QString&
我对这种差异感到困惑。这是故意的吗?这有什么理由吗?QStringView如果一天结束时没有人消费它们,那么用例应该是什么?
在描述中是std::async这样说的:
如果
std::future获取的 fromstd::async没有从引用移动或绑定到引用,则 the 的析构函数std::future将在完整表达式的末尾阻塞,直到异步操作完成,本质上使代码如下同步:Run Code Online (Sandbox Code Playgroud)std::async(std::launch::async, []{ f(); }); // temporary's dtor waits for f() std::async(std::launch::async, []{ g(); }); // does not start until f() completes(请注意,通过调用 std::async 以外的方式获得的 std::futures 的析构函数永远不会阻塞)
这个说法令人困惑,我不清楚在std::launch::deferred政策的情况下应该是什么行为。好吧,实验表明,它不会阻止,但我不知道是否规范明确地说,从未来返回std::async与std::launch::deferred政策的析构函数不会阻塞。
这打开了另一个关于默认策略的后续问题:如果未来从std::async析构函数中的块返回,std::launch::async并且在 的情况下不阻塞std::launch::deferred,那么在默认 ( std::launch::async | std::launch::deferred) 策略的情况下应该会导致非常不一致的行为。最近我在问std::asyncwith default launch policy的语义:std::async with automatic (launch::async|launch::deferred) launch policy 的语义是什么?,这个例子更让我困惑,在我们不明确知道策略的平台选择的情况下,模式的适用性是非常值得怀疑的。
更新:我发现标准P0701r1的提案并没有完全回答我的问题,但如果该提案被接受,它将解决阻塞/非阻塞析构函数的歧义。
我有一个由另一个人生成的孤立提交,我在 GitHub GUI 中看到了它。由于路径上没有包含此提交的分支/标签,因此无法通过克隆存储库来访问此提交。假设提交的作者已经删除了他的本地存储库,我希望直接在 GitHub 中为这个提交分配一个分支/标签。
只需使用我可以使用的直接链接即可看到此提交,因为它的 git hash 是已知的。但是,在Insights>Network中看不到提交。
如何从 GitHub 中的此提交页面为提交分配标签?是否可以直接从此页面创建新分支?有什么其他方法可以将此提交返回到服务中?
初始化std::stringstream 构造函数接受const string&以下参数:
explicit stringstream (const string& str,
ios_base::openmode which = ios_base::in | ios_base::out);
Run Code Online (Sandbox Code Playgroud)
这个接口在 C++98 中是合理的,但从 C++17 开始,我们有了std::string_view表示字符串的类的更便宜的替代方案。该类std::stringstream不会修改它接受的字符串,不拥有它,也不要求它以空终止。那么为什么不添加另一个接受 的构造函数重载呢std::string_view?是否存在任何障碍使该解决方案不可能(或不合理)屈服于Boost::Iostreams等替代方案?
为了提高性能,我尝试std::string用自定义专业化来替代,std::basic_string其中我用自定义分配器替换标准分配器。有一件事让我感到惊讶:std::stoi函数类需要不断引用std::string(或std::wstring) 作为输入,因此这些函数不能与其他专业化一起使用。但从逻辑上讲,这些函数不应该关心内存是如何分配的;所以他们的签名看起来过于限制。
虽然我可以使用std::from_chars从任何类似字符串的数据中读取整数,但我仍然想知道是否有这样设计的原因std::stoi,以及是否还有其他设计用于与std::basic_string模板一起使用的 STL 函数。
如果一个线程读取另一个线程正在写入的非原子原始变量,是否保证在写入之前或之后读取该值,或者它是否可以在写入期间以某种方式读取某些损坏的版本?
我意识到诸如链表之类的集合是另一回事。
有几种方法可以将文本信息传递给 C++ 中的函数:可以是 c-string/std::string、按值/按引用、左值/右值、常量/可变的。C++17 在标准库中添加了一个新类:std::string_view. string_view 的语义是提供没有所有权的只读文本信息。因此,如果您只需要读取一个字符串,您可以使用:
void read(const char*); // if you need that in a c-style function or you don't care of the size
void read(const std::string&); // if you read the string without modification in C++98 - C++14
void read(std::string_view); // if you read the string without modification in C++17
Run Code Online (Sandbox Code Playgroud)
我的问题是在 C++17 中void read(const std::string&)是否应该优先考虑任何情况void read(std::string_view)。假设不需要向后兼容性。
我有一个依赖于$OSTYPE变量值的遗留脚本。该脚本期望在 Solaris 上该值为“SunOS”,而在 AIX 上该值为“AIX”。对于 Linux,它根据正则表达式检查变量,其中大写值以“LINUX”开头。
我尝试从 Jenkins 运行此脚本,发现值不同:Solaris 返回“solaris2.11”,而 AIX 返回“aix7.1.0.0”。我echo $OSTYPE在 Jenkins 运行脚本的同一台服务器上运行了该命令,并且得到了“SunOS”/“AIX”。
所以我的主要问题是:这种差异的根源是什么(系统如何形成这个变量的值,以及为什么 Jenkins 具有与从 bash 运行的 echo 不同的值)。一个附带问题是哪种是可靠的使用方式$OSTYPE。
我正在尝试从 Qt 发送一个 POST 请求,其中正文为 JSON 格式。首先,我断言请求在 curl 中有效:
curl -i -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}' -X POST http://myserver.com/api
Run Code Online (Sandbox Code Playgroud)
工作正常,我收到了来自服务器的预期响应。在 Python 中同样有效。现在我需要从 C++/Qt 发送这个请求:
QNetworkAccessManager *mgr = new QNetworkAccessManager(this);
QHttpMultiPart *httpMultiPart = new QHttpMultiPart(mgr);
QHttpPart *httpPart = new QHttpPart();
httpPart->setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
httpPart->setBody("{\"key1\":\"value1\", \"key2\":\"value2\"}");
httpMultiPart->append(*httpPart);
QNetworkReply *reply = mgr->post(QNetworkRequest(QUrl("http://myserver.com/api")), httpMultiPart);
QObject::connect(reply, &QNetworkReply::finished, [=]()
{
QString err = reply->errorString();
QString contents = QString::fromUtf8(reply->readAll());
});
Run Code Online (Sandbox Code Playgroud)
现在我收到一个错误,其中 errorString 返回:`
"Error downloading http://myserver.com/api - server replied: Unsupported Media Type"`
Run Code Online (Sandbox Code Playgroud)
原因是什么?我应该如何像使用 curl 发送的那样发送 …
c++ ×6
c++17 ×2
qt ×2
string-view ×2
bash ×1
c++11 ×1
concurrency ×1
content-type ×1
future ×1
git ×1
github ×1
jenkins ×1
json ×1
os-detection ×1
post ×1
qstring ×1
stdasync ×1
stdstring ×1
stoi ×1