小编R2B*_*2B2的帖子

在覆盖纯虚函数时使用`override`有什么意义吗?

例如:

class Base {
  virtual void my_function() = 0;
};

class Derived : Base {
  void my_function() override;
};
Run Code Online (Sandbox Code Playgroud)

从我读到的,override关键字用于确保我们在我们覆盖的函数中具有正确的签名,并且它似乎是它的唯一用途.

但是,在纯虚函数的情况下,如果我们在Derived类(或Base类中使用不正确的签名,取决于如何看待事物)中使用不正确的签名,编译器将抛出错误.那么,在声明override结束时添加是否有任何意义Derived::my_function()

c++ overriding pure-virtual c++11

45
推荐指数
3
解决办法
6278
查看次数

C++中右移的未定义行为

来自cppreference.com:

对于无符号a和带有非负值的带符号a,a >> b的值是a/b的整数部分.对于负数a,a >> b的值是实现定义的(在大多数实现中,它执行算术右移,因此结果保持为负).

在任何情况下,如果右操作数的值为负或大于或等于提升的左操作数中的位数,则行为未定义.

如果右操作数大于或等于提升左操作数中的位数,为什么我们有一个未定义的行为?
在我看来,结果应为0(至少对于无符号/正整数)...

特别是,使用g ++(版本4.8.4,Ubuntu):

unsigned int x = 1;
cout << (x >> 16 >> 16) << " " << (x >> 32) << endl;
Run Code Online (Sandbox Code Playgroud)

得到: 0 1

c++ bit-shift

14
推荐指数
1
解决办法
2112
查看次数

Latex,"没有计数器'counterName'定义"错误,使用\ include

我收到以下错误:

! LaTeX Error: No counter 'exCoutner' defined.
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此代码时:

\documentclass[]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}

\usepackage{amsmath}

\newcounter{exCounter}
\numberwithin{exCounter}{section}
\newenvironment{example}[1]{
    \begin{center}
    \begin{minipage}[t][\height][c]{0.8\textwidth}
    \hrulefill\newline
    \refstepcounter{exCoutner}
    \textit{Example \arabic{exCounter}} - \textbf{#1}\newline
    }{
    \vspace{-0.5\baselineskip}
    \hrulefill
    \end{minipage}
    \end{center}
    \vspace{\baselineskip}
    }

\begin{document}

\include{chapter1}

\include{chapter2}

\include{chapter3}

\end{document}
Run Code Online (Sandbox Code Playgroud)

chapterX.tex文件遵循以下模式:

\section{Addition}

\begin{example}{Addition}
$1 + 1 = 2$
\end{example}
Run Code Online (Sandbox Code Playgroud)

评论该行时

\refstepcounter{exCounter}
Run Code Online (Sandbox Code Playgroud)

一切正常,但显然计数器不会增加,每次使用环境"示例"时都会打印"示例0".

对我来说似乎很奇怪的是,在评论该行时没有任何错误被抛出,并且LaTeX设法访问exCounter(因为它打印了值0),但是一旦我尝试递增它(甚至使用\ addtocounter),这个出现"无计数器定义"错误.

非常感谢你!

counter latex include

6
推荐指数
1
解决办法
4448
查看次数

将sqrt(n)与理性p/q进行比较

给出一个整数n和一个有理p/q(pq是整数).

你如何比较sqrt(n)p/q

解决方案1:sqrt(n) <= (double) p / q
应该工作,但是调用sqrt比使用乘法/除法慢.

解决方案2: (double) n * q * q <= p * p
更好,但我不禁想到因为我们使用浮点数,如果p/q非常接近sqrt(n),我们可能会得到错误的答案.此外,它需要将整数转换为浮点数,这比使用整数(稍微)慢一些.

解决方案3:n*q*q <= p*p
更好,但是如果pq由于溢出而变大(例如,当使用64位整数时,如果pq > = 2 ^ 32),则会遇到麻烦.

解决方案4:使用具有bignum库的解决方案3 /使用具有未绑定整数的编程语言.

解决方案5: (q / p) * n <= p / q
成功避免任何溢出问题,但我不确定这在所有情况下都是正确的,因为整数除法...

所以...我很乐意选择解决方案2或4,但我想知道是否有人有巧妙的技巧来解决这个问题,或者可能是解决方案5工作(或不工作)的证明(或反例).

math floating-point performance

6
推荐指数
1
解决办法
151
查看次数

在这里组合文档,替换和死亡时消除中间变量

$msg在这个例子中是否可以消除中间变量的使用?

($msg = <<'END_MSG') =~ s/\n//gm;
My super error message
Which happens to span over multiple lines
But that I want to print without newlines.
END_MSG
die $msg;
Run Code Online (Sandbox Code Playgroud)

如果我不需要删除换行符,我可以直接执行,die <<'END_MSG'; ...但我还没有找到将这两种方法结合起来的方法.

perl

0
推荐指数
1
解决办法
22
查看次数