【问题标题】:How can I pass a constant int via command line argument in C++?如何通过 C++ 中的命令行参数传递常量 int?
【发布时间】:2017-05-10 01:23:01
【问题描述】:

我希望能够通过我将调用长度的命令行参数传递一个整数。我需要使这个常量,因为它将用于确定几个位集的大小。我尝试过很多方法,例如:

int main(int arc, const char* argv[]){
        const int * ptr;
        if (!(istringstream{argv[1]} >> ptr)) { return 1;}
        const int length = *ptr;

        bitset<length> right_ones = 1;
        return 0;
}

我也试过这样:

int main(int arc, const char* argv[]){
        int test_int;   
        if (!(istringstream{argv[1]} >> test_int)) { return 1;}
        const int length = argv[1];

        bitset<length> right_ones = 1;
        return 0;
}

但是我尝试过的所有方法都没有奏效。我怎样才能做到这一点?

【问题讨论】:

  • 如果通过命令行参数传递,显然不是常量。
  • 让您的 DeLorean 达到 88 英里/小时。运行程序,观察用户未来的输入,然后返回添加。
  • 模板只能与编译时间常数一起使用。运行前传递的值显然不是编译时常量
  • 如果这是一个编译时间常数,为什么不把它作为编译器参数(就像在 qmake 项目文件中,取决于你使用什么)而不是运行时参数?
  • 除非用 C++17 改变,否则你可以使用std::vector&lt;bool&gt;。在某些方面,它的行为更像 bitset 而不是 vector,所以我记得打算更改它并引入一个新类来替换功能。

标签: c++ constants command-line-arguments bitset variable-types


【解决方案1】:

如果要作为命令行参数传递,则不能将其设为常量。

顺便说一句,这与您的情况有关:Define bitset size at initialization?

【讨论】:

  • 好吧,我想我误解了 const 是什么......无论如何使用 bitset 的长度不是恒定的吗?只要我可以通过命令行传递位集的大小,我的问题就会得到解决。
  • 我更新了我的答案@partyphysics。阅读链接了解更多信息!
  • 谢谢,boost::dynamic_bitset 解决了问题
【解决方案2】:

bitset 的长度在编译时是需要的,因此无论您如何尝试,都无法在运行时传递该值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2021-08-24
    • 2017-04-14
    • 2013-08-10
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多