C++ 关于const和ifdef的问题

C++ 关于const和ifdef的问题,c++,C++,可能的重复项: 我是这个领域的新手,只是没有掌握某些功能或概念 例如,我有以下代码: #ifdef directory 现在,我们可以在程序中使用一个简单的if条件。那么为什么要使用#ifdef?我不明白 我还有一个关于常量的问题。我研究了一些论文,但他们只是解释如何使用它,但我没有找到任何理由 例如,我不清楚这一点: const void operator=(const point& other); 在这里,我认为这是一个通过引用调用的函数。这意味着该函数表示,operator

可能的重复项:

我是这个领域的新手,只是没有掌握某些功能或概念

例如,我有以下代码:

#ifdef directory
现在,我们可以在程序中使用一个简单的
if
条件。那么为什么要使用
#ifdef
?我不明白

我还有一个关于常量的问题。我研究了一些论文,但他们只是解释如何使用它,但我没有找到任何理由

例如,我不清楚这一点:

const void operator=(const point& other);

在这里,我认为这是一个通过引用调用的函数。这意味着该函数表示,
operator=
引用其参数,因此
other
将作为该函数内的普通变量。和
const
用于指示参数不会更改参数的实际值。但是为什么在
void
之前要使用
const

我可以帮你解决第一点。使用
#ifdef
可以更改根据先前配置的信息编译的代码

例如:

#define MAKE_SEVEN
#ifdef MAKE_SEVEN
    int x = 7;
#else
    int x = 9;
#endif
与以下内容完全相同:

    int x = 7;
就编译器而言

这为什么有用?一个原因是,您可能希望为不同的机器编译不同的代码,而仍然只有一个源代码副本

现在,这个“配置”可以用
#define
设置,甚至可以作为编译器命令行的一部分,比如
gcc-DMAKE\u SEVEN…

一个比上面给出的更有用的例子可能是根据目标环境使用不同的数据类型。守则:

#ifdef INT_IS_32_BITS
    typedef int int32;
#else
    #ifdef LONG_IS_32_BITS
        typedef long int32;
    #else
        #error No suitable type for int32 found
    #endif
#endif
将允许您针对不同的体系结构使用32位整数类型的正确类型


对于所有那些
int
是32位的,你使用
gcc-DINT\u是32位的…
,对于所有那些
long
是32位的,你使用
gcc-DLONG\u是32位的…
,对于所有其他的,编译器会抱怨。

不确定为什么这与pdf生成相关

当您将参数传递给方法或函数时,当这些参数通过引用或指针传递时,被调用的例程可以更改这些参数

(const char*other)或(const point&other)向调用者指示不修改传递的参数所引用(或指向)的对象

要指示对象的方法不修改该对象,请使用const跟随方法声明

class X {
    private:
        char *name;
    public:
        Draw() const;        // Draw does not modify X
        const char*getName() const { return name; }
}
如果从函数返回const对象,则不允许函数的调用方修改返回的值。当您返回不希望更改的成员时,这非常有用。上面,getName返回一个指针,该指针不能用于修改name成员参数


我也可以告诉你const_cast的情况,但是,孩子们不应该玩火柴……

标签错了,英语错了,什么都错了。你问题的第一部分是关于另一个问题的重复。你问题的第二部分是另一个问题的重复:#如果已定义(CPU_INTEL)|已定义(WIN32)|已定义(U M_AMD64)|已定义(U M_IA64)#定义WKB_字节_顺序wkbNDR#否则#定义WKB_字节_顺序wkbXDR#。。但是在这里,我以前没有定义过这个,我们为什么说如果定义了这个。。。。。然后执行此操作,请告诉我有关const to const void操作符=(const point&other)的信息;这里,如果它说这是function by reference意味着这个函数说operator=引用参数,但它在这个函数中作为普通变量,在参数中使用const不会改变参数的实际值。。为什么在void之前使用const…我认为这个函数实际上是引用函数。。请向我说明清楚,并向我解释为什么在void之前使用const。@piyapiya,您正在查看的那些定义是针对特定处理器、操作系统和体系结构的。例如,您需要在Windows和Linux下做一些不同的事情。至于
const
问题,我将把它留给比我拥有更多C++-fu的人。它是在编译器命令行中定义的。使用
gcc-dxyzy
编译与在源文件顶部使用
#define xyzy
编译是一样的。我得到了这个结果,但仍然感到困惑。。请尝试通过const void操作符=(const point&other)向我说明这一点;常量无效运算符=(常量点和其他);在这里,const inside参数用于不修改参数。这个函数是由ref表示的,表示函数将以参数作为引用,函数内部的参数将作为普通变量。。const inside参数表明jit不会改变参数,如果它是这样的,那么为什么在void之前使用cosnt。。我要做什么也许所有的问题对你们所有人来说都很有趣,但要非常坦率。。没有学习的年龄。如果有人想让我们鼓起勇气。。正确的