使用原始指针或智能指针创建c++模板函数会得到不同的结果
C++ templated function creation with raw or smart pointer gets different results
假设我有:(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中,i
和checker
是两个不相关的对象。由构造函数写入i
的1
值与未初始化的checker
的内容无关。
也许你的意图是建立一个联盟?
相关文章:
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用指向整数的指针时获得不同的结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- C++数组和指针的大小的结果
- C++ 函数指针的计算结果为 1
- 对象指针打印结果以相反的顺序进行
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- 插入指针数组会删除上一个结果
- 打印整数指针元素时的结果不同
- 错误:通过指针显示重复的结果
- 当应该删除其目标时,为什么此智能指针给出正确的结果
- 为什么我得到这个字符指针的不同结果?
- 在我的C++链表实现中取消引用节点指针,给出意想不到的结果
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- Cout删除了(未签名的字符)指针,给了我意外的结果
- 为什么无法将 std::bind 的结果分配给函数指针
- 如何否定MEM_FN创建的功能指针的结果
- 返回指向操作+的结果的指针
- 为什么在同一类中使用不同的(共享_ptr和正常)指针构造函数,我会得到不同的结果