草庐IT

c++ - 如何在 Visual Studio 中启用 C++17 编译?

我想使用C++17功能。如何在MicrosoftVisualStudio中将编译从C++14切换到C++17?或者它在VS的发布版本中不可用? 最佳答案 现在有一个下拉菜单(至少从VS2017.3.5开始),您可以在其中专门选择C++17。可用选项是(在项目>属性>C/C++>语言>C++语言标准下)ISOC++14标准。msvc命令行选项:/std:c++14ISOC++17标准。msvc命令行选项:/std:c++17VisualStudio2022(MSVCC++20andthe/std:c++20Switch-C++Team

c++ - 为什么在 C++17 中使用 std::make_unique?

据我了解,C++14引入了std::make_unique因为,由于未指定参数评估顺序,这是不安全的:f(std::unique_ptr(newMyClass(param)),g());//SyntaxA(解释:如果评估首先为原始指针分配内存,然后调用g(),并在std::unique_ptr构造之前抛出异常,则内存泄漏。)调用std::make_unique是一种限制调用顺序的方法,从而使事情变得安全:f(std::make_unique(param),g());//SyntaxB从那时起,C++17已经澄清了评估顺序,使得语法A也安全,所以这是我的问题:还有使用std::make_

c++ - 如何使用 C++17 获取文件大小(以字节为单位)

我应该知道特定操作系统是否存在陷阱?这个问题有很多重复项(1,2,3,4,5),但它们在几十年前就得到了回答。今天,在许多这些问题中获得很高票数的答案是错误的。.sx上其他(旧QA)的方法stat.h(包装器sprintstatf),使用系统调用tellg(),根据定义返回一个位置,但不一定是字节。返回类型不是int。 最佳答案 (在C++17中添加)使verystraightforward.#include#include//...std::uintmax_tsize=std::filesystem::file_size("c:\

C++17类模板偏推

我对Templateargumentdeductionforclasstemplates的理解提议是在演绎上下文中同质化模板函数和模板类的行为。但我认为我误解了一些东西。如果我们有这个模板对象:templatestructtest{staticconstexprautosize=S;usingtype_t=T;test(type_t(&input)[size]):data(input){}type_t(&data)[size]{};};我倾向于使用辅助函数作为语法糖来创建test对象:templatetesthelper(T(&input)[S]){returninput;}可以使用如

C++17类模板偏推

我对Templateargumentdeductionforclasstemplates的理解提议是在演绎上下文中同质化模板函数和模板类的行为。但我认为我误解了一些东西。如果我们有这个模板对象:templatestructtest{staticconstexprautosize=S;usingtype_t=T;test(type_t(&input)[size]):data(input){}type_t(&data)[size]{};};我倾向于使用辅助函数作为语法糖来创建test对象:templatetesthelper(T(&input)[S]){returninput;}可以使用如

C++ 17 为什么不删除二合字母和三合字母?

C++17移除了三元组。IBM强烈反对这一点(here和here),因此似乎存在移除/不移除双方的争论。但既然决定删除三合字母,为什么要留下二合字母?除了保留三合字母的原因(显然重量不足以保留它们)之外,我没有看到任何保留二合字母的理由。 最佳答案 对于不知情的用户来说,三合字母比二合字母更成问题。这是因为它们在字符串文字和注释中被替换。这里有一些例子……示例A:std::stringexample="What??!??!";std::coutWhat||将被打印到控制台。这是因为三元组??!被翻译成|。示例B://Error?!?

C++ 17 为什么不删除二合字母和三合字母?

C++17移除了三元组。IBM强烈反对这一点(here和here),因此似乎存在移除/不移除双方的争论。但既然决定删除三合字母,为什么要留下二合字母?除了保留三合字母的原因(显然重量不足以保留它们)之外,我没有看到任何保留二合字母的理由。 最佳答案 对于不知情的用户来说,三合字母比二合字母更成问题。这是因为它们在字符串文字和注释中被替换。这里有一些例子……示例A:std::stringexample="What??!??!";std::coutWhat||将被打印到控制台。这是因为三元组??!被翻译成|。示例B://Error?!?

c++ - C++11、14、17 或 20 是否为 pi 引入了标准常量?

C和C++中的数字pi存在一个相当愚蠢的问题。据我所知,math.h中定义的M_PI不是任何标准所要求的。新的C++标准在标准库中引入了很多复杂的数学-双曲函数、std::hermite和std::cyl_bessel_i、不同的随机数生成器等等等等。是否有任何"new"标准为pi引入了常数?如果不是-为什么?没有它,所有这些复杂的数学如何运作?我知道关于C++中的pi的类似问题(它们已经有好几年了,而且标准老了);我想知道问题的当前状态。我也对为什么哦为什么C++仍然没有pi常数但有很多更复杂的数学非常感兴趣。我知道我可以自己定义pi为4*atan(1)或acos(-1)或doubl

c++ - 是什么让 i = i++ + 1;在 C++17 中合法吗?

在你开始大喊未定义的行为之前,这明确列在N4659(C++17)中i=i+++1;//thevalueofiisincremented然而在N3337(C++11)i=i+++1;//thebehaviorisundefined发生了什么变化?据我所知,来自[N4659basic.exec]Exceptwherenoted,evaluationsofoperandsofindividualoperatorsandofsubexpressionsofindividualexpressionsareunsequenced.[...]Thevaluecomputationsoftheoper

java - 这是什么日期格式? 2011-08-12T20 :17:46. 384Z

我有以下日期:2011-08-12T20:17:46.384Z。这是什么格式?我正在尝试通过DateFormat.getDateInstance().parse(dateStr)用Ja​​va1.4解析它,我得到了java.text.ParseException:Unparseabledate:"2011-08-12T20:17:46.384Z"我想我应该使用SimpleDateFormat用于解析,但我必须先知道格式字符串。到目前为止,我所拥有的只是yyyy-MM-dd,因为我不知道T在这个字符串中的含义——与时区有关吗?此日期字符串来自FilesCMISdownloadhistor