c++ - 在 Visual Studio C++ 中弃用单个构造函数的正确语法是什么?

标签 c++ visual-studio-2015 c++14 deprecated

我在我的代码中使用了新的 [[deprecated("message")]] 属性。我有一个具有两个构造函数的类,其中一个应该标记为已弃用(显然已简化,并且可能存在语法错误):

class MyClass
{
public:
    // good constructor
    MyClass(int someNumber): _someNumber(someNumber) {}

    [[deprecated("Use MyClass(int) instead")]]
    MyClass(const char* someStr): _someNumber(atoi(someStr)) {}

private:
    int _someNumber;
}

Visual Studio 提示“属性‘已弃用(‘改用 MyClass(int)’”)’不能应用于此上下文。

有没有办法弃用 Visual Studio 2015 中的构造函数,以便在任何地方使用它时收到警告?

最佳答案

将参数标记为已弃用:

MyClass([[deprecated]]const char* someStr){}

或者:

MyClass([[deprecated("Use MyClass(int) instead")]]const char* someStr){}

或者使用__declspec(deprecated) :

__declspec(deprecated("** Use MyClass(int) instead **"))
        MyClass(const char* someStr) : _someNumber(atoi(someStr)) {}

另外,根据您的更新版本(第 3 号),您可能会遇到 this bug .

关于c++ - 在 Visual Studio C++ 中弃用单个构造函数的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018977/

相关文章:

visual-studio - 安装: Microsoft Visual C++ Redistributable stuck at 'Processing: Windows7_MSU_X64'

c++ - 我应该如何使用表达式模板来实现数学 vector 类的标量乘法

c++ - 用源代码 boost spirit 解析

visual-studio-2015 - MSBuild 不适用于 VS2017 for VS2015 (v140) 工具包

nuget-package - 尝试打开 "there are no writable config files"时出现错误消息 "Manage nuget packages"

c++ - std::numeric_limits<int>::has_infinity + 条件三元运算符

c++ - 成员变量元组的初始化

C++ 运算符重载总是 false

c++ - std::function vs Lambda 用于传递成员函数

c++ - 序列点和偏序