草庐IT

c++ - 在现代 PC 的 C++ 异常类中避免 std::wstring 数据成员是否有意义?

在this"ErrorandExceptionHandling"中的“我应该如何设计我的异常类?”段落中Boost网页,上面写着:[...]3.Don'tembedastd::stringobjectoranyotherdatamemberorbaseclasswhosecopyconstructorcouldthrowanexception.我必须定义一个异常类来表示某种形式的文件访问运行时错误,所以我想从std::runtime_error派生它,并添加一个FileName()属性以访问发生错误的文件名。为简单起见,我打算添加一个std::wstring数据成员来存储文件名(Uni

c++ - 现代处理器(如i7)会在遍历指针列表时跟随指针并预取其数据吗?

我想学习如何编写更好的代码,以利用CPU的缓存。使用连续内存似乎是理想的情况。话虽如此,我很好奇是否可以使用非连续内存进行类似的改进,但是要遵循一系列的指针,例如:structPosition{int32_tx,y,z;}...std::vectorposPointers;...updatePosition(){for(uint32_ti=0;i这只是一些粗糙的模拟代码,为了正确学习,我们只说所有Position结构都是在堆上随机创建的。像Inteli7这样的现代,智能处理器能否向前看,并很快就需要X_ptr的数据?以下代码行会有所帮助吗?...//forloopPosition&ne

c++ - 现代编译器能否展开使用开始和结束迭代器表示的 `for` 循环

考虑以下代码vectorv;//fillvconstvector::iteratorend=v.end();for(vector::iteratori=v.bgin();i!=end;++i){//dostuff}g++、clang++、icc等编译器是否能够像这样展开循环。不幸的是,我不知道程序集是否能够从输出中验证循环是否展开。(而且我只能访问g++。)在我看来,这似乎需要代表编译器比平时更聪明,首先推断迭代器是随机访问迭代器,然后计算出循环执行的次数。启用优化后,编译器可以执行此操作吗?感谢您的回复,在你们中的一些人开始讲授过早优化之前,这是一个出于好奇的练习。

c++ - Qt 中使用的 C++ 语言有多现代?

我听说QtAPI是用相当过时的C++语言编写的。是真的吗?是否有任何计划使其使用更现代的C++语言?有这方面的官方信息吗?是否有任何项目旨在用更现代的C++包装当前的QtAPI结构?更新这个问题比模板更重要,而且不仅仅是关于当前事态的问题(这就是为什么我用future标签标记它)。更新我特别关注QtAPI,因为这是该框架的用户使用的对象。在API中使用现代C++语言使其更强大、更灵活且更易于使用。Qt内部使用什么样的C++对我来说远没有那么重要。 最佳答案 众所周知,Qt不使用模板,这是一种非常有用的现代C++功能。但这并不意味着需

c++ - 如何使用 clang-tidy 通过 visual studio 实现现代化

我正在尝试从visualstudio或命令行对文件应用clang现代化,利用我的visualstudio2015C++项目中的包含路径和设置。我创建了一个clang-tidy设置文件,如下所示:clang-tidy-dump-config=.clang-tidy-checks="modernize-loop-convert,modernize-deprecated-headers"并从(cygwin)命令行验证它适用于单个文件:clang-tidy.exe-explain-config列出(除其他外)'modernize-deprecated-headers'isenabledinth

c++ - 如何在现代 C++ 中解析文本数据文件?

我(也)经常面临必须解析文本数据文件的任务——在“每个人”使用XML之前你使用的那种文本结构化数据表示——这是某种行业标准。(这些太多了。)无论如何,基本任务始终是获取一个文本文件并将其中的内容填充到某种数据结构中,以便我们的C++代码可以对信息执行某些操作。现在,我已经手动实现了一些简单的(哦,还有很多错误)解析器,我非常鄙视它。:-)所以-我想知道当我想将结构化文本数据“解析”为内存中表示时的最新技术水平(想想:任意语言的XML数据绑定(bind))。到目前为止我发现的是“Whatparsergeneratordoyourecommend”,但我不太确定我在寻找解析器生成器(例如A

c++ - 在现代 x86 硬件上编写比特流的最快方法

在x86/x86-64上编写比特流的最快方法是什么?(码字通过编写比特流,我指的是将可变比特长度符号连接到连续内存缓冲区中的过程。目前我有一个带有32位中间缓冲区的标准容器可以写入voidwrite_bits(SomeContainer&dst,unsignedint&buffer,unsignedint&bits_left_in_buffer,intcodeword,shortbits_to_write){if(bits_to_write>bits_left_in_buffer):0;dst.push_back(towrite);bits_left_in_buffer=32-full

c++ - 旧的(类 C)fscanf 方法的现代等效(C++)样式是什么?

如果我想在读取带有分号分隔符的文件时将旧的C代码“升级”到更新的C++,最好的选择是什么:/*readinginfromfileC-like:*/fscanf(tFile,"%d",&mypost.nr);/*delimiter;*/fscanf(tFile,";%[^;];",mypost.aftername);/*delimiter;*/fscanf(tFile,"%[^;]",mypost.forename);/*delimiter;*/fscanf(tFile,";%[^;];",mypost.dept);/*delimiter;*/fscanf(tFile,"%[^;];",

c++ - 在 C++11 之后的现代 C++ 中使用原始指针

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion考虑到C++11标准现在得到了大多数不错的编译器的良好支持,2014年使用原始指针的一些主要原因是什么?我确定了几个场景:您正在扩展大量使用原始指针的遗留代码库,并且您希望保持风格的一致性。您正在使用仅导出原始指针的库,但我想您仍然可以使用强制转换。您想利用指针的能力来提供多级间接寻址。(我不太了解C++11,不知道是否可以使用智能指针或其他一些技术来实现。)你认为还有哪些场景适合使用指针

r - `seek` 在现代 Windows 上可靠吗?

来自manualpage对于R中的seek:UseofseekonWindowsisdiscouraged.WehavefoundsomanyerrorsintheWindowsimplementationoffilepositioningthatusersareadvisedtouseitonlyattheirownrisk,andaskednottowastetheRdevelopers'timewithbugreportsonWindows'deficiencies.这对于具有NTFS文件系统的现代Windows版本仍然适用吗? 最佳答案