草庐IT

c++ - 在 C++(98、11 和 14)中初始化静态数据成员的正确方法是什么

在C++中初始化static数据成员的正确方法是什么?我也对它如何从C++98到C++11到C++14的变化感兴趣。这是一个例子://bufferedOutput.hclassBufferedOutput{//Staticmemberdeclaration.staticlongbytecount;};//bufferedOutput.cpplongBufferedOutput::bytecount=50;还有其他方法可以初始化static数据成员吗? 最佳答案 规则一直如下:整数或枚举类型的const静态数据成员(SDM)可以在类中

c++ - 自 C++14 以来,总是更喜欢 set<T, less<>> 到 set<T>?

#include#include#includeusingnamespacestd;intmain(){string_viewkey="hello";setcoll1;coll1.find(key);//errorset>coll2;coll2.find(key);//oksinceC++14}那么,它应该是一个规则:总是喜欢set>到setC++14起? 最佳答案 找到反例很简单:#include#includeusingnamespacestd;structconverts_to_string{operatorstring()c

c++ - 自 C++14 以来,总是更喜欢 set<T, less<>> 到 set<T>?

#include#include#includeusingnamespacestd;intmain(){string_viewkey="hello";setcoll1;coll1.find(key);//errorset>coll2;coll2.find(key);//oksinceC++14}那么,它应该是一个规则:总是喜欢set>到setC++14起? 最佳答案 找到反例很简单:#include#includeusingnamespacestd;structconverts_to_string{operatorstring()c

c++ - C++14 和 C++17 使用 : `*p++ = *p` 的区别

在编写一些代码时,我遇到了我设置的值设置错误的问题。我最终找到了罪魁祸首,在进行测试时发现它在C++14和C++17上的表现不同。代码如下:#include#include#includeintmain(){uint8_t*p=newuint8_t[3];memset(p,0x00,1);p++;memset(p,0xF0,1);p++;memset(p,0xFF,1);p--;p--;//Thislineinparticular*p++=*p;*p++=0x0F;p--;p--;printf("Position0hasvalue%u\n",*p);p++;printf("Positi

c++ - C++14 和 C++17 使用 : `*p++ = *p` 的区别

在编写一些代码时,我遇到了我设置的值设置错误的问题。我最终找到了罪魁祸首,在进行测试时发现它在C++14和C++17上的表现不同。代码如下:#include#include#includeintmain(){uint8_t*p=newuint8_t[3];memset(p,0x00,1);p++;memset(p,0xF0,1);p++;memset(p,0xFF,1);p--;p--;//Thislineinparticular*p++=*p;*p++=0x0F;p--;p--;printf("Position0hasvalue%u\n",*p);p++;printf("Positi

删除构造函数的 C++14 值初始化

我有一些误解:让我们将结构A的默认构造函数标记为已删除:structA{A()=delete;};下一条指令格式正确,效果如何?:Aa{};来自cppreferencevalueinitilization:1)IfTisaclasstypewithnodefaultconstructororwithauser-provideddefaultconstructororwithadeleteddefaultconstructor,theobjectisdefault-initialized.但是那么默认初始化的效果是:IfTisaclasstype,thedefaultconstructo

删除构造函数的 C++14 值初始化

我有一些误解:让我们将结构A的默认构造函数标记为已删除:structA{A()=delete;};下一条指令格式正确,效果如何?:Aa{};来自cppreferencevalueinitilization:1)IfTisaclasstypewithnodefaultconstructororwithauser-provideddefaultconstructororwithadeleteddefaultconstructor,theobjectisdefault-initialized.但是那么默认初始化的效果是:IfTisaclasstype,thedefaultconstructo

c++ - c++14 中 __cplusplus 有标准定义吗?

我正在寻找设置一些预处理器的东西,我想要一个更准确的数字来说明C++14中的__cplusplus应该被定义为什么。该标准是否规定了一项? 最佳答案 N3936*§16.8[cpp.predefined]/p1:1Thefollowingmacronamesshallbedefinedbytheimplementation:__cplusplusThename__cplusplusisdefinedtothevalue201402LwhencompilingaC++translationunit.N3936是成为C++14的最终工作

c++ - c++14 中 __cplusplus 有标准定义吗?

我正在寻找设置一些预处理器的东西,我想要一个更准确的数字来说明C++14中的__cplusplus应该被定义为什么。该标准是否规定了一项? 最佳答案 N3936*§16.8[cpp.predefined]/p1:1Thefollowingmacronamesshallbedefinedbytheimplementation:__cplusplusThename__cplusplusisdefinedtothevalue201402LwhencompilingaC++translationunit.N3936是成为C++14的最终工作

c++ - 如何让 CMake 基于 GCC 版本通过 std=c++14/c++1y 或 c++17/c++1z?

GCC4.x不接受C++14代码的--std=c++14开关-它需要--std=c++1y代替。更高版本采用--std=c++1z但(可能)不是--std=c++17尚未设置(在2016年编写).也许C++11也有类似的问题。CMake是否有一些工具(可能作为一个模块)来根据GCC版本传递正确的开关? 最佳答案 当想要指定特定的C++版本时,推荐使用CMake3.1及更高版本执行此操作的方法是使用CXX_STANDARD、CXX_STANDARD_REQUIRED和CXX_EXTENSIONS目标属性,或它们的变量等效项以指定目标默