Информация об изменениях

Сообщение Re[6]: Безопасно ли присваивать один указатель другому?.. от 26.03.2018 14:56

Изменено 26.03.2018 15:18 AlexGin

Re[6]: Безопасно ли присваивать один указатель другому?..
Здравствуйте, SaZ, Вы писали:
...
SaZ>Лучше вот это объясните:
SaZ>https://ideone.com/3WjDKl
...
Издержки онлайнового ideone.com

У меня в MSVC2015

#include "stdafx.h"
#include <iostream>
#include <string>

struct A
{
    virtual void f() = 0;
};

struct B : A
{
    void f() override {}
};

int main()
{
    const auto p = &B::f;
    const bool ok = sizeof(void *) == sizeof(p);
    if (!ok)
        std::cout << "Not OK"; 

    std::cout << "sizeof(void *) = " << sizeof(void *) << std::endl; 
    std::cout << "sizeof(p) = " << sizeof(p) << std::endl;

    getchar();
    return 0;
}


Вывод для MSVC2015 (x86):
sizeof(void *) = 4
sizeof(p) = 4

Вывод для MSVC2015 (x64):
sizeof(void *) = 8
sizeof(p) = 8

Верю студии!

вывод для http://rextester.com/l/cpp_online_compiler_visual
sizeof(void *) = 8
sizeof(p) = 8

Здесь (в cpp_online_compiler_visual) также вроде логично.

вывод для ideone.com:
аналогично для https://wandbox.org:
аналогично для http://cpp.sh (в режиме Cpp-11):
Not OKsizeof(void *) = 8
sizeof(p) = 16

Насчёт http://rextester.com:
cpp_online_compiler_gcc также выдал:
и cpp_online_compiler_clang

Not OKsizeof(void *) = 8
sizeof(p) = 16

Странно...
По крайней мере, у меня здесь нет логичного объяснения.
Re[6]: Безопасно ли присваивать один указатель другому?..
Здравствуйте, SaZ, Вы писали:
...
SaZ>Лучше вот это объясните:
SaZ>https://ideone.com/3WjDKl
...
Издержки онлайнового ideone.com

У меня в MSVC2015

#include "stdafx.h"
#include <iostream>
#include <string>

struct A
{
    virtual void f() = 0;
};

struct B : A
{
    void f() override {}
};

int main()
{
    const auto p = &B::f;
    const bool ok = sizeof(void *) == sizeof(p);
    if (!ok)
        std::cout << "Not OK"; 

    std::cout << "sizeof(void *) = " << sizeof(void *) << std::endl; 
    std::cout << "sizeof(p) = " << sizeof(p) << std::endl;

    getchar();
    return 0;
}


Вывод для MSVC2015 (x86):
sizeof(void *) = 4
sizeof(p) = 4

Вывод для MSVC2015 (x64):
sizeof(void *) = 8
sizeof(p) = 8

Верю студии!

вывод для http://rextester.com/l/cpp_online_compiler_visual
sizeof(void *) = 8
sizeof(p) = 8

Здесь (в cpp_online_compiler_visual) также вроде логично.

вывод для ideone.com:
аналогично для https://wandbox.org:
аналогично для http://cpp.sh (в режиме Cpp-11):
Not OKsizeof(void *) = 8
sizeof(p) = 16

Насчёт http://rextester.com:
cpp_online_compiler_gcc также:
и cpp_online_compiler_clang:

Not OKsizeof(void *) = 8
sizeof(p) = 16

Странно...
По крайней мере, у меня здесь нет логичного объяснения.