相关疑难解决方法(0)

`constexpr`和`const`之间的区别

constexpr和之间有什么区别const

  • 我什么时候才能只使用其中一个?
  • 我何时可以同时使用这两种方法?如何选择?

c++ const constexpr c++11

540
推荐指数
9
解决办法
19万
查看次数

为什么预处理器宏是邪恶的,有什么替代方案?

我一直都这么问,但我从来没有得到过一个非常好的答案; 我认为,在写第一个"Hello World"之前,几乎所有程序员都遇到过"宏不应该使用宏","宏是邪恶的"这样的短语等等,我的问题是:为什么?有了新的C++ 11,这么多年后还有一个真正的选择吗?

简单的部分是关于宏#pragma,特定于平台和特定于编译器,并且大多数时候它们具有严重的缺陷,例如#pragma once在至少两种重要情况下容易出错:不同路径中的相同名称以及一些网络设置和文件系统.

但总的来说,宏的用法和替代品呢?

c++ c-preprocessor c++11

85
推荐指数
3
解决办法
4万
查看次数

在C++中使用min和max函数

从C++,是minmax优选超过fminfmax?为了比较两个整数,它们是否提供基本相同的功能?

您是倾向于使用这些功能集中的一个还是更喜欢自己编写(可能是为了提高效率,可移植性,灵活性等)?

笔记:

  1. C++标准模板库(STL)在标准C++ 算法头中声明minmax函数.

  2. C标准(C99)提供标准C math.h标头中的函数fminfmax函数.

提前致谢!

c c++ max min

69
推荐指数
5
解决办法
26万
查看次数

舍入整数除法(而不是截断)

我很想知道如何将数字舍入到最接近的第十个整数.例如,如果我有:

int a = 59 / 4;
Run Code Online (Sandbox Code Playgroud)

以浮点计算的14.75; 如何将数字存储为"a"中的15?

c math int rounding integer-division

67
推荐指数
9
解决办法
13万
查看次数

kernel.h中min宏中"(void)(&_min1 ==&_min2)"的功能是什么?

kernel.h中, min定义为:

#define min(x, y) ({                \
    typeof(x) _min1 = (x);          \
    typeof(y) _min2 = (y);          \
    (void) (&_min1 == &_min2);      \
    _min1 < _min2 ? _min1 : _min2; })
Run Code Online (Sandbox Code Playgroud)

我不明白这行(void) (&_min1 == &_min2);是做什么的.是某种类型检查还是什么?

c linux-kernel

60
推荐指数
4
解决办法
8464
查看次数

C++模板是伪装的宏吗?

我已经用C++编程了几年,我已经使用了很多STL并且已经创建了我自己的模板类几次以了解它是如何完成的.

现在我正在尝试将模板更深入地集成到我的OO设计中,一个唠叨的想法不断回到我身边:它们只是一个宏,真的......你可以使用#defines实现(而不是UGLY)auto_ptrs,如果你真的想要.

这种思考模板的方式有助于我理解我的代码将如何实际工作,但我觉得我必须以某种方式忽略这一点.宏是邪恶的化身,但"模板元编程"风靡一时.

那么,真正的区别是什么?模板如何避免#define引导你进入的危险,比如

  • 在您不期望它们的地方难以理解的编译器错误?
  • 代码臃肿?
  • 跟踪代码有困难吗?
  • 设置调试器断点?

c++ macros templates

54
推荐指数
10
解决办法
2万
查看次数

如何处理windows.h中的max宏与std中的max冲突?

所以我试图从cin获得有效的整数输入,并使用了这个问题的答案.

它建议:

#include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个关于Windows的错误,说max宏没有采用那么多的参数.这意味着我必须这样做

do
{
    if(cin.fail())
    {
        cin.clear();
#undef max
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay …
Run Code Online (Sandbox Code Playgroud)

c++ iostream cin

54
推荐指数
5
解决办法
2万
查看次数

如何使C++宏像函数一样?

让我们说由于某种原因你需要写一个宏:MACRO(X,Y). (我们假设您有一个很好的理由不能使用内联函数.) 您希望此宏模拟对没有返回值的函数的调用.


示例1:这应该按预期工作.

if (x > y)
  MACRO(x, y);
do_something();
Run Code Online (Sandbox Code Playgroud)

示例2:这不应导致编译器错误.

if (x > y)
  MACRO(x, y);
else
  MACRO(y - x, x - y);
Run Code Online (Sandbox Code Playgroud)

实施例3:这应该编译.

do_something();
MACRO(x, y)
do_something();
Run Code Online (Sandbox Code Playgroud)

编写宏的天真方式是这样的:

#define MACRO(X,Y)                       \
cout << "1st arg is:" << (X) << endl;    \
cout << "2nd arg is:" << (Y) << endl;    \
cout << "Sum is:" << ((X)+(Y)) << endl;
Run Code Online (Sandbox Code Playgroud)

这是一个非常糟糕的解决方案,它失败了所有三个例子,我不应该解释原因.

忽略宏实际上做的事情,这不是重点.


现在,我经常看到编写宏的方法是将它们用大括号括起来,如下所示:

#define MACRO(X,Y)                         \
{                                          \
  cout << "1st arg is:" << …
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

48
推荐指数
6
解决办法
10万
查看次数

是否在stdlib.h中定义了max(a,b)?

我正在使用两台计算机,每台计算机都有不同版本的visual studio.在visual studio 2008计算机上,我的代码编译.在visual 2010计算机上,我的代码没有编译,因为我正在使用宏max(a,b),据我所知,这是在stdlib.h中定义的.我不能只定义max(a,b)因为它将是对visual 2008计算机的重新定义.但是如果我没有定义max(a,b)我的代码就不能在visual 2010计算机上编译.

有解决方案吗

c macros std max visual-studio

20
推荐指数
3
解决办法
5万
查看次数

如何在C中的缩小示例中使用__extension__和__typeof__?

我看到gcc的源代码中有这样的标记,

但如何使用这些2令牌?

c token

9
推荐指数
1
解决办法
9633
查看次数