我不时会看到如下的枚举:
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
Run Code Online (Sandbox Code Playgroud)
我不明白[Flags]-attribute 到底是做什么的.
任何人都可以发布一个很好的解释或示例?
我正在尝试将我的C++编译器更新为C++ 11.我已经搜索了一下,我得出的结论是我必须使用旗帜,-std=c++0x或者-std=gnu++0x我不知道很多关于旗帜的事情.谁能帮我?(我正在使用Ubuntu 12.04.)
这是我尝试使用C++ 11中包含的库(即数组)时从编译器获得的错误:
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Run Code Online (Sandbox Code Playgroud)
此文件需要编译器和库支持即将推出的ISO C++标准C++ 0x.此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用.
对于我的生活,我不记得如何设置,删除,切换或测试位域中的位.要么我不确定,要么混淆它们,因为我很少需要这些.因此,"比特作弊表"会很好.
例如:
flags = flags | FlagsEnum.Bit4; // Set bit 4.
Run Code Online (Sandbox Code Playgroud)
要么
if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way?
Run Code Online (Sandbox Code Playgroud)
您能举例说明所有其他常见操作,最好是使用[Flags]枚举的C#语法吗?
假设我有这个枚举:
[Flags]
enum Letters
{
A = 1,
B = 2,
C = 4,
AB = A | B,
All = A | B | C,
}
Run Code Online (Sandbox Code Playgroud)
要检查是否AB已设置,我可以这样做:
if((letter & Letters.AB) == Letters.AB)
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来检查组合标志常量的任何标志是否设置为以下?
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Run Code Online (Sandbox Code Playgroud)
你可以换&一些东西吗?
对于像这样的二进制文件来说不太稳定......
为什么人们总是使用enum值0, 1, 2, 4, 8而不是0, 1, 2, 3, 4?
这与位操作等有关吗?
我真的很感激有关如何正确使用它的小样本片段:)
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Delete = 4
}
Run Code Online (Sandbox Code Playgroud) 我下面有一个标志枚举.
[Flags]
public enum FlagTest
{
None = 0x0,
Flag1 = 0x1,
Flag2 = 0x2,
Flag3 = 0x4
}
Run Code Online (Sandbox Code Playgroud)
我无法将if语句评估为true.
FlagTest testItem = FlagTest.Flag1 | FlagTest.Flag2;
if (testItem == FlagTest.Flag1)
{
// Do something,
// however This is never true.
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在尝试编写一个将检查两个错误标志的脚本,并且如果一个标志(或两者)被更改,它将回显 - 发生错误.我的剧本:
my_error_flag=0
my_error_flag_o=0
do something.....
if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then
echo "$my_error_flag"
else
echo "no flag"
fi
Run Code Online (Sandbox Code Playgroud)
基本上,它应该是,以下内容:
if ((a=1 or b=2) or (a=1 and b=2))
then
display error
else
no error
fi
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
line 26: conditional binary operator expected
line 26: syntax error near `]'
line 26: `if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then'
Run Code Online (Sandbox Code Playgroud)
我的括号搞砸了吗?
有一个变量,它包含一些标志,我想删除其中一个.但我不知道如何删除它.
这是我如何设置标志.
my.emask |= ENABLE_SHOOT;
Run Code Online (Sandbox Code Playgroud) 我已经看到了许多使用不同标志运行Perl代码或脚本的方法.但是,当我尝试google每个标志的含义时,我主要将结果发送到通用Perl网站,并且没有关于标志或其使用的具体信息.
以下是我经常遇到的旗帜,我不知道它们的含义:
如果你告诉我每个人的意思和一些用例,或者至少告诉我找出其含义的方法,我将非常感激.
找到一个有趣的JVM标志:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
Run Code Online (Sandbox Code Playgroud)
它打印了数百种不同的选项,我以前从未听说过.它还会打印默认值,这有助于更好地诊断JVM行为.另一个有趣的标志是:
-XX:+UnlockExperimentalVMOptions
Run Code Online (Sandbox Code Playgroud)
有谁知道任何解释其中每一个的文件?
flags ×10
c# ×5
enums ×5
.net ×2
attributes ×1
bash ×1
c ×1
c++ ×1
c++11 ×1
command-line ×1
g++ ×1
if-statement ×1
java ×1
jvm ×1
optimization ×1
perl ×1
permissions ×1
printing ×1