c++ - MS 对 C++ 的扩展的有用性

标签 c++ visual-c++

Microsoft extensions to C++ 中的最后一项,“将非 Const 指针参数传递给期望引用 Const 指针参数的函数”是一个扩展,因此它可以被视为一个有益 功能。但是,我看不到它的值(value)。他们展示的例子表明这是危险的。

typedef int T;

const T  acT = 9;                 // A constant of type 'T'
const T * pcT = & acT;            // A pointer to a constant of type 'T'

void func2 ( const T * & rpcT )   // A reference to a pointer to a constant of type 'T'
{
    rpcT = pcT;
}

T * pT;                           // A pointer to a 'T'

void func ()
{
    func2 ( pT );                 // Should be an error, but isn't detected
    * pT   = 7;                   // Invalidly overwrites the constant 'acT'
}

为什么它是扩展而不是错误?

最佳答案

因为“这不是错误,而是功能。”

是的,这显然是一件坏事。您必须询问负责的 Microsoft 工程师,但我怀疑这是一个错误,并且它得到维护只是因为在某些时候有人的软件依赖于它并且 Microsoft 希望保持向后兼容性。

但是,此文档似乎已过时:我无法让 Visual Studio 2015 或 2013 接受使用此扩展的代码。

关于c++ - MS 对 C++ 的扩展的有用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31714425/

相关文章:

c++ - 另一个使用相同 InnoDB 数据或日志文件的 mysqld 进程

c++ - OpenCV 中的支持 vector 机 : low accuracy OCR with RBF kernel

c++ - 我如何制作屏幕缓冲区 C++

c++ - cppcheck - 终止Strncpy

c++ - 64位MFC版本访问冲突异常

c - MKL BLAS 函数的行为不符合预期

c++ - C 程序可移植性

c++ - LNK2001 关于所有私有(private)方法

winforms - 如何在 Visual C++ 中为窗体设置渐变背景色?

c# - 托管 C++ : Strings in List is not passed back to caller