有这个代码:
#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位模式下编译时,会出现警告:
Run Code Online (Sandbox Code Playgroud)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); ^
在32位模式下编译时使用此警告(使用-m32标志).它看起来就像std::chrono::duration::rep
是一个类型的long int
在64位程序,并long long int
在32位程序.
有没有一种可移植的方式来打印它像%zu
说明符size_t
?
有以下代码:
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编译的.
我想用新行替换逗号并将其分配给变量。在这种情况下 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)
如何使其工作,以便在最终结果中存在未转换为空格的新行?