小编Mam*_*mma的帖子

C预处理器:#define一个可以在没有括号的情况下调用的宏

我想知道是否可以编写一个行为如下的宏:

void Func(int x)
{
    printf("%d",x);
}

#define func Func x //or something

int main()
{
    func 10; //<---- remove parenthesis
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,func将指向真实函数Func,而10将是没有括号的参数.

我试图new在C++中实现类似于运算符的东西但在C中.

例:

class Base* b = new(Base);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,class是一个宏struct,new是一个带函数指针的函数,Base是一个为其分配内存的函数struct Base.

我想将代码重写为这样的代码:

class Base* b = new Base;
Run Code Online (Sandbox Code Playgroud)

如果我能想出一个宏,那将是可能的:)

c c-preprocessor

12
推荐指数
1
解决办法
2018
查看次数

C++ 14标准对auto作为参数类型的说法是什么

让我们看看下面的代码:

#include <iostream>

class Test
{
private:
    int x;
public:
    Test(int _x) :
        x(_x)
    {
        std::cout << "Im being constructed" << std::endl;
    }

    int getx()
    {
        return this->x;
    }

    friend std::ostream& operator<<(std::ostream& os, Test& other)
    {
        os << other.getx();
        return os;
    }
};

auto func(auto x)
{
    std::cout << x << std::endl;
    return x.getx();
}

int main()
{
    auto y = func(20);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器如何确定(20)是int还是Test对象?Test的构造函数不明确,那么标准对它有什么看法呢?

c++ auto c++14

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

标签 统计

auto ×1

c ×1

c++ ×1

c++14 ×1

c-preprocessor ×1