草庐IT

handling-boolean-flag-options

全部标签

c++ - 显式初始化 std::optional 时,我应该使用 nullopt 吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion安std::optional可以像这样初始化为脱离状态:std::optionaloi{nullopt};但也像这样:std::optionaloi{};赋值也是如此(oi={}或oi=nullopt)。除了个人喜好/美感之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。

c++ - 未初始化的 boolean 变量不一致

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoIseestrangevalueswhenIprintuninitializedvariables?Funwithuninitializedvariablesandcompiler(GCC)我想知道我在解决代码问题时遇到的一个神秘问题。生产中的代码有一个未初始化的boolean变量,库正在检查这个boolean值。在LIVE站点中,此变量始终表现为TRUE开发环境中的相同代码始终表现为FALSE。我知道,由于LIVE和DEV之间的环境差异,未初始化的bool变量可能具有未定义的值。但这是我的问题。如

c++ - 为什么 ~(true^true) 不是真的? boolean 运算符(否定)适用于 `unsigned char` s,但不适用于 boolean 值? (C++)

我听说通常除了0之外的“一切”都是真的。但是现在我身上发生了非常奇怪的事情……或者我只是认为我以正确的方式做事,而我却没有。这是正在发生的事情:当我想检查a是否等价于b时,我可以使用NOT(aXORb)。当我检查unsignedchar时,一切正常,例如unsignedchara=5;unsignedcharb=3;unsignedcharc=~(a^b);给我c==249:a是:00000101,也就是5。b是:00000011,也就是3。~(a^b)是:11111001,即249。现在,让我们用bool来试试这个。cout这让我在控制台中:-1-2-2-10110false虽然我希

c++ - 二元 boolean 运算符是否具有结合性?

语言定义的a&&b&&c是指(a&&b)&&c还是a&&(b&&c)?哇,Jerry真快。为了加强这个问题:它真的重要吗?a&&b&&c被解释为(a&&b)&&c或a&&(b&&c)之间会有明显的区别吗>? 最佳答案 §5.14/1:“&&运算符从左到右分组。[...]与&不同,&&保证从左到右评估:如果第一个操作数为假,则不评估第二个操作数。”至于何时或如何重要:我不确定它是否真的适用于内置类型。但是,有可能以使其变得重要的方式重载它。例如:#includeclassA;classM{intx;public:M(intx):x(x

c++ - 数组 C++ 中每个 boolean 值 1 位

boolfp[81];根据我的理解,fp应该使用ceil(81/8)字节,因为它是连续的。我说的对吗?我怎样才能证明这一点? 最佳答案 不,缓冲区的大小是实现定义的。请引用以下标准中的引述。因此,您可以期望的大小是81*X,其中X是bool的大小,它是实现定义的。$5.3.3/1-“sizeof运算符产生其操作数的对象表示中的字节数。操作数是一个未计算的表达式,或者是带括号的类型ID。sizeof运算符不应应用于具有函数或不完整类型的表达式,或在声明其所有枚举数之前应用于枚举类型,或应用于此类类型的括号名称,或应用于指定的左值一个位

c++ - boolean 运算符++和——

今天,在编写一些VisualC++代码时,我遇到了一些让我感到惊讶的事情。似乎C++支持bool的++(递增),但不支持--(递减)。这只是一个随意的决定,还是背后有某种原因?编译:staticHMODULEhMod=NULL;staticboolonce=false;if(!once++)hMod=LoadLibrary("xxx");这不是:staticHMODULEhMod=NULL;staticboolonce=true;if(once--)hMod=LoadLibrary("xxx"); 最佳答案 它来自使用整数值作为bo

Python 扩展 : using different compiler flags for a C parts and C++ parts

对于我的python扩展,我有C(来自嵌入式库)和C++文件,它们被编译并链接在一起。只有C++部分与Python接口(interface)(通过SWIG)。这在VS2015的windows和linux下的gcc中都有效。但是,对于gcc,C++文件需要一组不同于C文件的编译器标志(例如-std=c++11、-Wno-reorder),以避免出现有关C中不正确标志的警告。在setuptools/distutils中有没有办法单独更改每个文件的编译器标志,例如。基于文件扩展名?我已经使用了来自https://stackoverflow.com/a/36293331/3032680的自定义

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。例如,我想要一个程序来写入编译时使用的标志。intmain(){std::coutgcc/g++是否存在这样的常量?或者更好:是否有在gcc和clang中都定义的常量?我对检查优化级别和-march标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量? 最佳答案 以下命令打印出所有预定义的宏:g++-dM-E-这适用于gcc和g++。您可以自行检查-不幸的是,没有宏可让您轻松访问完整的gcc/g++命令行。幸运的是,大多数-m.

c++ - 在进程间内存中使用 boost::optional 是否安全?

请考虑以下结构:structThingThatWillGoInSharedMemory{boost::optionalopt_value;};我正在使用boost::interprocess来创建共享内存区域。我对boost::optional的理解是它是一个有区别的union,而不是一个可为空的指针。作为一个反例,像std::map和std::vector这样使用堆的东西需要一个显式分配器才能在进程间内存中使用它们,但是boost::optional,我相当确定不使用堆并且等同于写作:structThingThatWillGoInSharedMemory{boolvalue_init

c++ - 如何构建 Boost::program_options

我想使用boost::program_options。安装boost后,我​​认为我必须单独构建program_options(http://www.boost.org/doc/libs/1_43_0/more/getting_started/windows.html)。但我不知道该怎么做。我正在尝试编译C:\ProgramFiles\boost\boost_1_42\libs\program_options\example\first.cpp(http://www.boost.org/doc/libs/1_42_0/doc/html/program_options/tutorial.