Каково влияние пространств имен в связях c ++ по сравнению со связями в c? - PullRequest
1 голос
/ 09 марта 2009

Каково влияние пространств имен в связях c ++ по сравнению со связями в c?

Можно ли создать имя, которое имеет внутреннюю связь с внешней связью, просто используя пространство имен. Аналогично, наоборот.

Ответы [ 2 ]

3 голосов
/ 09 марта 2009

Как правило, имя пространства имен добавляется перед именем любой вложенной сущности до того, как имя искажается и передается компоновщику.

Если у вас есть две функции с одинаковыми сигнатурами в разных пространствах имен, они просто отлично связываются в один файл. Если у вас есть два класса с одинаковым именем и хотя бы один метод с одинаковой сигнатурой, и эти классы находятся в разных пространствах имен - они снова отлично соединяются друг с другом.

1 голос
/ 09 марта 2009

И C, и C ++ позволяют объектам и функциям иметь статическую файловую связь, также известную как внутренняя связь. C ++ поддерживает использование безымянных пространств имен вместо области видимости файла, что является преимуществом компилятора. static - модификатор связи Так что, если вам нужна область файла и внутренняя связь, вы должны использовать как пространство имен, так и static в C ++. В C, однако, вам нужно только статическое ключевое слово для достижения того же.

/* C and C++ code */

static int  bufsize = 1024;
static int  counter = 0;

static long square(long x)
{
    return (x * x);
}

Предпочтительный способ сделать это в C ++:

 // C++ code
namespace /*unnamed*/
{
    static int  bufsize = 1024;
    static int  counter = 0;

    static long square(long x)
    {
        return (x * x);
    } 

}
...