小编wul*_*jey的帖子

在32位和64位程序中使用std :: chrono :: duration :: rep和printf

有这个代码:

#include <cstdio>
#include <chrono>

int main()
{
  auto d = std::chrono::microseconds(1).count();
  printf("%lld", d);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当在64位模式下编译时,会出现警告:

main.cpp: In function ‘int main()’:
main.cpp:7:19: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘long int’ [-Wformat=]
   printf("%lld", d);
                   ^
Run Code Online (Sandbox Code Playgroud)

在32位模式下编译时使用此警告(使用-m32标志).它看起来就像std::chrono::duration::rep是一个类型的long int在64位程序,并long long int在32位程序.

有没有一种可移植的方式来打印它像%zu说明符size_t

c++ io c++11 long-integer c++-chrono

7
推荐指数
2
解决办法
3134
查看次数

派生类中的析构函数标记为noexcept(false)

有以下代码:

class Member
{
public:
  ~Member() noexcept(false) {}
};

class A
{
public:
  virtual ~A() {}
};

class B : public A
{
public:
  Member m;
};
Run Code Online (Sandbox Code Playgroud)

错误是:

main.cpp:13:7: error: looser throw specifier for ‘virtual B::~B() noexcept (false)’
 class B : public A
       ^
main.cpp:10:11: error:   overriding ‘virtual A::~A() noexcept’
   virtual ~A() {}
           ^
Run Code Online (Sandbox Code Playgroud)

为什么B类中的析构函数被标记为noexcept(false)?它似乎以某种方式从Member类中获取它.它是由g ++ 6.3编译的.

c++ c++11

5
推荐指数
1
解决办法
118
查看次数

bash 在使用 tr 并分配给变量时用空格替换新行

我想用新行替换逗号并将其分配给变量。在这种情况下 tr 的结果完成了这项工作:

$echo "a,b" | tr ',' '\n'
a
b
Run Code Online (Sandbox Code Playgroud)

但是,使用相同的命令并将其分配给变量会将新行更改为空格:

$ x=$(echo "a,b" | tr ',' '\n')
$ echo $x
a b
Run Code Online (Sandbox Code Playgroud)

如何使其工作,以便在最终结果中存在未转换为空格的新行?

bash

5
推荐指数
1
解决办法
1524
查看次数

标签 统计

c++ ×2

c++11 ×2

bash ×1

c++-chrono ×1

io ×1

long-integer ×1