小编αλε*_*λυτ的帖子

使用命名空间进行函数成员定义

我在.h文件中有以下类定义:

namespace N {
    struct S {
        S(); // no definition for member here    
    };
}
Run Code Online (Sandbox Code Playgroud)

我想在.cpp文件中为类构造函数(一般成员)编写定义.我考虑以下两种情况:

  1. namespace N {
        S::S() { /* definition */ }  
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. using namespace N;
    S::S() { /* definition */ }  
    
    Run Code Online (Sandbox Code Playgroud)

我有点困惑为什么第二个工作根本就是因为从来没有看过这种方式直到今天.为什么第二个工作?一些引用标准的人将不胜感激.

使用一种方法而不是另一种方法有什么细微差别?我应该更喜欢第一种还是第二种形式?

c++ namespaces language-lawyer

3
推荐指数
1
解决办法
153
查看次数

确定计时持续时间的一部分

我想计算一个持续时间的哪个部分包含在另一个持续时间中.还有的整数(6)标准执行,但它给了我0(由于整数divison)以下例子:

auto s = 1s;
auto ms = 200ms;
std::cout << ms / s; // 0, but I want 0.2 here
Run Code Online (Sandbox Code Playgroud)

是否有更优雅和通用的方法来计算这样的值而不是以下丑陋的解决方案

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono_literals;    

    auto s = 1s;
    auto ms = 200ms;

    const auto part = 1. * ms.count() / std::chrono::duration_cast<decltype(ms)>(s).count();

    std::cout << part << '\n';
}
Run Code Online (Sandbox Code Playgroud)

一种聪明的方法是使用1. / (s / ms);,但它不适合任何持续时间类型.

c++ c++-chrono

3
推荐指数
1
解决办法
52
查看次数

整齐的错误舍入

clang-tidy [bugprone-in Correct-roundings]检查的文档说:

数字 0.499999975(小于 0.5 的最小可表示浮点数)四舍五入为 1.0

据我所知,下面的最小浮点数0.50.4999999702,而不是0.499999975。但尽管如此,这两个数字都给出了0朴素舍入计算中的值:

#include <iostream>

int main() {
   
    const float v1 = 0.499999975;
    const float v2 = 0.4999999702;

    std::cout << (int)(v1+0.5) << "\n" 
              << (int)(v2+0.5) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

c++ rounding clang-tidy

3
推荐指数
1
解决办法
903
查看次数

为什么 GitHub C++ Core Guideline 说全局对象比单例更好?

Github C++ 核心指南说:

全局对象通常比单例更好。

我一直认为相反。从那以后在 C++ 中发生了什么变化?或者可能只是另一个错字?

c++ singleton global-object

2
推荐指数
1
解决办法
477
查看次数

仅使用C++ 03中的标准函数获取std :: pair成员

有没有办法,只使用C++ 03标准函数获得std::pair成员,即firstsecond

在C++ 11中,我可以分别使用std::get<0>或者std::get<1>在这种情况下.

c++ c++03

2
推荐指数
1
解决办法
120
查看次数

类似函数的宏没有正文但参数名称不同

以下代码:

#define MYDEF(x)
#define MYDEF(y)
int main() {}
Run Code Online (Sandbox Code Playgroud)

给我一个错误(如果pedantic-errors禁用则发出警告):

"MYDEF"宏重新定义

原因是未使用的参数的名称不同(更多,宏中没有正文).但为什么?在哪些情况下它可能是一个问题?

c c++ macros

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