【问题标题】:g++ template error Small_sizeg++ 模板错误 Small_size
【发布时间】:2015-07-22 11:57:11
【问题描述】:

我正在开发 C++ 编程语言的最新版本(认为是 5),但遇到了 g++ 版本 5.2 的问题。

我的代码是第 24 章中 Small_size 模板的变体。

#include <iostream>

template<int N>
bool is_small ()
{
  std::cerr << sizeof(N) << std::endl;
  std::cerr << N << std::endl;

  return N <= 255;
}


bool ism (int i_n)
{
  return i_n <= 255;
}


int main ()
{
  std::cout << "hallo welt" << std::endl;

  std::cout << 0 << " " << is_small<0> << std::endl;
  std::cout << 255 << " " <<is_small<255> << std::endl;
  std::cout << -4100000000 << " " << is_small<-4100000000> << std::endl;
  std::cout << 256 << " " << is_small<256> << std::endl;
  std::cout << 256 << " " << ism(256) << std::endl;
  std::cout << 256 << " " << (256 <= 255) << std::endl;
}

当我编译它时,没关系。但是当我运行这个东西时,它似乎被打破了。

[cpp11@hydra src]$ cat ~/bin/g14
#!/bin/bash
g++-52 -std=c++14 "${1}.C" -L$LIBPATH -o "$1"
[cpp11@hydra src]$ g14 konzept_small
[cpp11@hydra src]$ ./konzept_small 
hallo welt
0 1 
255 1
-4100000000 1
256 1                    //1
256 0
256 0
[cpp11@hydra src]$

我的问题是:

  1. 256 及更高的结果是错误的。见评论 //1
  2. cerr 上没有模板代码的输出

我从没有cerr 的版本开始,但只得到了错误的模板结果。

我从模板中删除了constexpr,但没有任何变化。

所以我在最后一步添加了cerr,看看有什么问题。

有什么想法吗?

【问题讨论】:

    标签: c++ templates g++ c++14


    【解决方案1】:

    你不是打电话给is_small&lt;N&gt;,只是打印出它的地址。您需要将代码更改为

    std::cout << 0 << " " << is_small<0>() << std::endl;
    std::cout << 255 << " " <<is_small<255>() << std::endl;
    std::cout << -4100000000 << " " << is_small<-4100000000>() << std::endl;
    std::cout << 256 << " " << is_small<256>() << std::endl;
    

    注意添加的()。不知道为什么你会得到你现在的输出,你确定你正在运行你发布的相同代码吗?

    【讨论】:

      【解决方案2】:

      is_small 是一个你应该添加括号的函数: 改变

      std::cout << 0 << " " << is_small<0> << std::endl;
      

      到这里

      std::cout << 0 << " " << is_small<0>() << std::endl;
      

      这个改动对我来说效果很好

      【讨论】:

        猜你喜欢
        • 2011-07-14
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        • 2020-06-17
        • 2016-01-31
        • 2017-01-15
        • 2015-10-12
        相关资源
        最近更新 更多