如何|=在强类型(作用域)enum(在C++ 11,GCC中)重载操作符?
我想在强类型枚举上测试,设置和清除位.为何选择强类型?因为我的书说这是好习惯.但这意味着我必须static_cast<int>到处都是.为了防止这种情况,我重载了|和&运算符,但我无法弄清楚如何在枚举上重载|=运算符.对于一个类,您只需将运算符定义放在类中,但对于在语法上似乎不起作用的枚举.
这是我到目前为止:
enum class NumericType
{
None = 0,
PadWithZero = 0x01,
NegativeSign = 0x02,
PositiveSign = 0x04,
SpacePrefix = 0x08
};
inline NumericType operator |(NumericType a, NumericType b)
{
return static_cast<NumericType>(static_cast<int>(a) | static_cast<int>(b));
}
inline NumericType operator &(NumericType a, NumericType b)
{
return static_cast<NumericType>(static_cast<int>(a) & static_cast<int>(b));
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因:这是它在强类型C#中的工作方式:一个枚举只有一个结构,其中包含一个基础类型的字段,并在其上定义了一堆常量.但它可以包含任何适合枚举隐藏字段的整数值.
似乎C++枚举的工作方式完全相同.在两种语言中,强制转换都需要从枚举变为int,反之亦然.但是,在C#中,默认情况下,按位运算符会重载,而在C++中,它们不会重载.
我试过这个:
def str1="good stuff 1)"
def str2 = str1.replaceAll('\)',' ')
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:
异常org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败,Script11.groovy:3:意外字符:'\'@第3行,第29列.1错误org.codehaus.groovy.control.ErrorCollector(failIfErrors:296)
所以问题是我该怎么做:
str1.replaceAll('\)',' ')
Run Code Online (Sandbox Code Playgroud) 什么是大小tword,oword以及yword操作数,如使用NASM/YASM手册?在相关的说明中,这些名称是否存在技巧或潜在的想法?有没有一种方法可以为更大的字大小赋予逻辑名称?
我知道,虽然字大小可以系统之间是不同的,一个NASM word是2个字节,dword是两倍(4个字节),qword是一个四字(8个字节),但是...是tword一个三重字(6个字节)?而对于oword和yword我甚至不能想象的一个似是而非的含义.
请注意,这可能是一个简单的问题,但我找不到答案.在NASM和YASM手册这些尺寸没有解释,甚至没有在DQ,DT,DY,RESQ,REST,RESY伪指令.我读到MASM使用类似系统的地方,但也找不到任何东西.
编辑:根据答案,这是完整的列表:
byteDBRESBwordDWRESWdwordDDRESDqwordDQRESQtwordDTRESToword,DO,,RESODDQRESDQywordDYRESY我很擅长使用C++,并且没有掌握语言的所有复杂性和细微之处.
在C++ 11中向任何类型的指针添加任意字节偏移量的最便携,正确和安全的方法是什么?
SomeType* ptr;
int offset = 12345 /* bytes */;
ptr = ptr + offset; // <--
Run Code Online (Sandbox Code Playgroud)
我在Stack Overflow和Google上找到了很多答案,但他们都提出了不同的建议.我遇到的一些变种:
ptr = (SomeType*)(((char*)ptr) + offset);
Run Code Online (Sandbox Code Playgroud)演员unsigned int:
ptr = (SomeType*)((unsigned int)ptr) + offset);
Run Code Online (Sandbox Code Playgroud)ptr = (SomeType*)((size_t)ptr) + offset);
Run Code Online (Sandbox Code Playgroud)"大小size_t并且ptrdiff_t总是与指针的大小一致.因此,这些类型应该用作大型数组的索引,用于存储指针和指针算术." - 关于 CodeProject上的size_t和ptrdiff_t
ptr = (SomeType*)((size_t)ptr + (ptrdiff_t)offset);
Run Code Online (Sandbox Code Playgroud)或者像之前的那样,但是intptr_t代替的size_t是签名而不是签名的:
ptr = (SomeType*)((intptr_t)ptr + (ptrdiff_t)offset);
Run Code Online (Sandbox Code Playgroud)仅转换为intptr_t,因为offset已经是有符号整数而intptr_t …
在尝试ICollection<T>.IsReadOnly从Collection<T>类中覆盖属性的显式接口实现时,我遇到了一些文档,指出显式接口成员实现无法被覆盖,因为它们不能具有修饰符,如virtual或abstract.在MSDN上,他们甚至通过创建另一个由显式接口成员实现调用的抽象或虚拟成员来指定如何使显式接口成员实现可用于继承.到目前为止没问题.
但后来我想:为什么有可能在C#重写任何刚刚通过指定接口的显式实现接口成员明确?
例如,假设我有一个这样的简单接口,具有属性和方法:
public interface IMyInterface
{
bool AlwaysFalse { get; }
bool IsTrue(bool value);
}
Run Code Online (Sandbox Code Playgroud)
还有一个A显式实现接口的类,并且有一个Test()调用自己的接口成员实现的方法.
public class A : IMyInterface
{
bool IMyInterface.AlwaysFalse
{ get { return false; } }
bool IMyInterface.IsTrue(bool value)
{ return value; }
public bool Test()
{ return ((IMyInterface)this).AlwaysFalse; }
}
Run Code Online (Sandbox Code Playgroud)
如您所见,四个成员中没有一个是虚拟的或抽象的,所以当我定义这样的类时B:
public class B : A
{
public bool AlwaysFalse
{ get …Run Code Online (Sandbox Code Playgroud) c# language-features overriding interface explicit-implementation
据我所知,这些是按钮具有焦点时唯一的反应键.
Enter即使您按下按键,也会立即按下"按下"按钮.(所以'点击'发生在KeyDown上).
按下的Space动作更像是正常的鼠标点击; 按住它不会激活Click事件,但一旦释放它就会执行.(所以"点击"发生在KeyUp或KeyPressed上.)
为什么不同?我想要一篇关于这个主题的好文章,或者只是一个逻辑解释,为什么这两个键有不同的行为.当然有一个解释!
我需要一个C#Random类实例的种子,我读到大多数人使用当前时间的滴答计数器.但这是一个64位值,种子需要是32位值.现在我认为GetHashCode()返回a 的方法int应该为其对象提供合理分布的值,这可以用于避免仅使用滴答计数的低32位.但是,我找不到任何有关Int64数据类型的GetHashCode()的信息.
所以,我知道它并不重要,但是下面的工作会像我想的那样好(我不能试错法随机性),或者它可能与使用(int)DateTime.Now.Ticks种子一样工作吗?或者甚至可能更糟糕?谁可以对此有所了解.
int seed = unchecked(DateTime.Now.Ticks.GetHashCode());
Random r = new Random(seed);
Run Code Online (Sandbox Code Playgroud)
编辑:为什么我需要种子而不只是让Random()构造函数完成工作?我需要将种子发送给使用相同种子的其他客户端进行相同的随机序列.
与之不同Dictionary,您无法Lookup通过逐个添加元素来构造.你碰巧知道原因吗?
Lookup就像multimap在C++中一样; 为什么我们不能在C#中修改它?如果我们真的不能,我们如何multimap在C#中构建数据结构?
我正在尝试在Linux Mint 16 Mate x64上安装LAMP堆栈,但在运行此命令时总是出错:
sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的源存储库.我设法安装apache2,php5并mysql但每当我安装了三个包,它返回:
包libapache2-mod-auth-mysql不可用,但是由另一个包引用.
这可能意味着包丢失,已被淘汰或仅可从其他来源获得E:包"libapache2-mod-auth-mysql"没有安装候选者
因此,我不能使用友好的URL功能.
我有一个Sharepoint项目列表:每个项目都有标题,描述和类型.我成功检索了它,我打电话给它result.我想首先检查是否有任何项目result以A开头然后是B然后是C等.我将为每个字母字符做同样的事情然后如果我找到一个以这个字符开头的单词我将必须显示粗体字符.
我最初使用此功能显示字符:
private string generateHeaderScripts(char currentChar)
{
string headerScriptHtml = "$(document).ready(function() {" +
"$(\"#myTable" + currentChar.ToString() + "\") " +
".tablesorter({widthFixed: true, widgets: ['zebra']})" +
".tablesorterPager({container: $(\"#pager" + currentChar.ToString() +"\")}); " +
"});";
return headerScriptHtml;
}
Run Code Online (Sandbox Code Playgroud)
如何检查单词是否以给定字符开头?
c# ×5
c++ ×2
c++11 ×2
assembly ×1
cpu-word ×1
dictionary ×1
enums ×1
gethashcode ×1
groovy ×1
interface ×1
linux ×1
linux-mint ×1
lookup ×1
mysql ×1
nasm ×1
overriding ×1
php ×1
pointers ×1
random ×1
replaceall ×1
sharepoint ×1
web-parts ×1
winforms ×1
word-size ×1
yasm ×1