在工作中,我在我的代码库中找到了这段代码,其中字符被转换了两次:
constexpr unsigned int foo(char ch0, char ch1, char ch2, char ch3)
{
return ((unsigned int)(unsigned char)(ch0)
| ((unsigned int)(unsigned char)(ch1) << 8)
| ((unsigned int)(unsigned char)(ch2) << 16)
| ((unsigned int)(unsigned char)(ch3) << 24))
;
}
Run Code Online (Sandbox Code Playgroud)
一个演员阵容还unsigned int不够吗?
在这种情况下,最好将其设为static_cast<unsigned_int>?
我有一个基类的 unique_ptrs 全局向量,我将 unique_ptrs 附加到派生类:
std::vector<std::unique_ptr<Base>> global_vec;
template<typename T>
Base* create_object()
{
std::unique_ptr<T> uptr = std::make_unique<T>(/* ... */);
Base* last_ptr = uptr.get();
global_vec.emplace_back(std::move(uptr));
return last_ptr; /*this is a bit irrelevant, but is for the caller*/
}
Run Code Online (Sandbox Code Playgroud)
现在,Base 本身有一个指向 Base 的原始指针的成员向量:
struct Base
{
...
std::vector<Base*> providers;
...
}
Run Code Online (Sandbox Code Playgroud)
组成 Base::providers 的指针都是通过从 global_vec 调用 unique_ptr::get() 获得的:
void Base::subscribe_to(Base* src)
{
providers.push_back(src);
}
Run Code Online (Sandbox Code Playgroud)
Base 有一个与这些订阅者一起工作的成员函数,并在工作之前检查 nullptr:
void Base::do_work()
{
...
for(Base* ptr : providers)
{
if(ptr != nullptr)
{
...
}
} …Run Code Online (Sandbox Code Playgroud)