使用原始指针或智能指针创建c++模板函数会得到不同的结果

C++ templated function creation with raw or smart pointer gets different results

本文关键字:指针 结果 函数 原始 智能 创建 c++      更新时间:2023-10-16

假设我有:(this class Is OK)

class CCheckSystemEndianess
{
private:
    int i;
    char checker[sizeof(int)];
public:
    CCheckSystemEndianess() : i(1) { }
    bool isLittleEndian()   { return (checker[0] != 0); }
};

但是这个动作很奇怪

template <bool checker>
class CEndian
{
private:
    template <typename T>
    T swapEndianess (const T& value)
    {
        if (CCheckSystemEndianess().isLittleEndian() == checker)
        {
            return value;
        }
.................

主要问题是,如果我创建CEndian不同的方式,我得到不同的结果与cchecksystemendian()。islittleendian ()

对前女友

CEndian<false> *p_endian = new CEndian<false>();

那么这一行就变成

CcheckSystemEndianess().isLittleEndian() = false 

但是如果我像这样创建CEndian

std::unique_ptr<CEndian<false> > p_endian (new Cendian<false>());

则这一行变成cchecksystemendian (). islittleendian () = true.

如果我在CEndian类中创建CCheckSystemEndianes,一切正常

template <typename T>
T swapEndianess (const T& value)
{
   std::unique_ptr<CCheckSystemEndianess> endianCheck(newCCheckSystemEndianess);

checksystemendian ().isLittleEndian()智能指针和原始指针都为真....

我有点困惑……

编辑:感谢Cubbi指出CCheckSystemEndianess必须是联合而不是类。

在cchecksystemendian中,ichecker是两个不相关的对象。由构造函数写入i1值与未初始化的checker的内容无关。

也许你的意图是建立一个联盟?