Facebook的fbstring_core类使用中所描述的"小字符串优化" 这次谈话,其中的类的数据成员的存储-一Char*,size和capacity-将被重新用于存储字符数据字符串是否足够小.用于区分这些情况的标志位位于"存储器的最右边的字符"中.我的问题是,是否通过bytes_union成员访问这些位(实际上从未编写过)是否构成了C++ 11标准的未定义行为?访问非活动联盟成员和未定义行为的答案?表明它是.
以下摘录包含这些成员的声明以及category()用于确定此优化是否有效的成员函数.
typedef uint8_t category_type;
enum class Category : category_type {
isSmall = 0,
isMedium = kIsLittleEndian ? 0x80 : 0x2,
isLarge = kIsLittleEndian ? 0x40 : 0x1,
};
Category category() const {
// works for both big-endian and little-endian
return static_cast<Category>(bytes_[lastChar] & categoryExtractMask);
}
struct MediumLarge {
Char * data_;
size_t size_;
size_t capacity_;
size_t capacity() const { …Run Code Online (Sandbox Code Playgroud) 我一直在研究通过UDP获取IP多播到浏览器的方法,并且发现很少有人建议我可以在不使用Java,Flash或Silverlight之类的插件来打开UDP端口的情况下这样做并且(不知何故)渲染视频.
检查HTML 5 <video>规范,(显然)具体实现细节的方式很少,所以据我所知,没有什么能阻止浏览器解析"udp://224.1.1.1"形式的地址:8000"并加入该IP /端口上的组播组.这是正确的理解吗?或者必须是资源指向的资源<source>?
当试图了解metaclass创建类实例的顺序时,我感到困惑。根据此图(源),
我输入以下代码进行验证。
class Meta(type):
def __call__(self):
print("Meta __call__")
super(Meta, self).__call__()
def __new__(mcs, name, bases, attrs, **kwargs):
print("Meta __new__")
return super().__new__(mcs, name, bases, kwargs)
def __prepare__(msc, name, **kwargs):
print("Meta __prepare__")
return {}
class SubMeta(Meta):
def __call__(self):
print("SubMeta __call__!")
super().__call__()
def __new__(mcs, name, bases, attrs, **kwargs):
print("SubMeta __new__")
return super().__new__(mcs, name, bases, kwargs)
def __prepare__(msc, name, **kwargs):
print("SubMeta __prepare__")
return Meta.__prepare__(name, kwargs)
class B(metaclass = SubMeta):
pass
b = B()
Run Code Online (Sandbox Code Playgroud)
但是,结果似乎不像下面这样。
SubMeta __prepare__
Meta …Run Code Online (Sandbox Code Playgroud)