今天我尝试合并一个Qt项目的两个git分支.两个分支都为它们添加了一些新的字符串和新的翻译.现在,Qt的lupdate工具存储了.ts文件中需要转换的源文件的行号.您可以想象两个分支的行号不相同,并且当两个翻译文件都已更新时,这会导致每个翻译文件出现数百个这样的合并冲突:
<<<<<<< HEAD
+ <location filename="../../src/network/mail/CSmtp.cpp" line="856"/>
=======
+ <location filename="../../src/network/mail/CSmtp.cpp" line="860"/>
>>>>>>> master
Run Code Online (Sandbox Code Playgroud)
您可能会说只使用其中一个版本并再次运行lupdate,但这样您就会丢失其中一个分支的所有新翻译.
其他工具,如gettext,没有这个问题,因为它们不存储行号.
在Qt中有哪些避免这个问题的好方法?
我只是注意到std::nextafter(0, 1)在我的系统上似乎产生一个大于0且小于0的值std::numeric_limits::min().
这怎么可能?我认为min()返回大于0的最小可能数.
#include <iostream>
int main(int argc, char *argv[])
{
double next = std::nextafter(0.0, 1.0);
double min = std::numeric_limits<double>::min();
std::cout << "next: " << next << "\nmin: " << min << "\nnext<min: " << (next < min) << "\nnext>0: " << (next > 0.0) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
next: 4.94066e-324
min: 2.22507e-308
next<min: 1
next>0: 1
Run Code Online (Sandbox Code Playgroud)
我的编译器是MinGW 5.3.0 32bit.
std::move(*optional)和之间有有效的区别吗*std::move(optional)?哪一个更可取?
完整示例:
#include <optional>
#include <vector>
void foo()
{
std::optional<std::vector<int>> ov = std::vector<int>{};
std::vector<int> v;
v = std::move(*ov);
}
void bar()
{
std::optional<std::vector<int>> ov = std::vector<int>{};
std::vector<int> v;
v = *std::move(ov);
}
Run Code Online (Sandbox Code Playgroud) 我正在比较两个字节数组memcmp(或更确切地说,是一个库函数来做到这一点)。阵列可能会变得相对较大,并且在许多情况下它们实际上可以是同一阵列。
写这样的东西有意义还是memcmp已经在内部做到这一点?
int memcmp_wrapper(const void* lhs, const void* rhs, std::size_t count) {
if (lhs == rhs)
return 0;
return std::memcmp(lhs, rhs, count);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用LibVLC播放视频并提出一些问题:
libvlc_video_set_marquee_int.经过一些跟踪和错误后,我发现,在设置一个字幕文本之前,我在启动视频大约70ms后暂停主线程时它会起作用.为什么?我怎么能做得更好?--no-video-title-show选项来禁用视频标题libvlc_new().然而,这有两个问题:首先,文档说不应该传递选项.好吧,好吧......但其次使用这个选项对字幕文本有一个奇怪的效果:你可以设置一个文本,但它只是闪烁一次并立即消失,无论libvlc_marquee_Timeout设置为什么.