【问题标题】:VS10 C++ Error C2833: 'operator string' is not a recognized operator or typeVS10 C++ 错误 C2833:“操作符字符串”不是可识别的操作符或类型
【发布时间】:2019-07-20 01:52:57
【问题描述】:

我正在尝试为Exponent 类创建一个自定义运算符operator ""_exp,我可以像这样调用该运算符:

std::cout << 10.5 * 2._exp << '\n';

我剩下的代码:

struct Exponent
{
    long double value;
};

Exponent operator ""_exp(long double exponent)
{
    return exponent;
}

我正在使用 Visual Studio 10 编译器,我收到 C2883 错误:

Error C2833: 'operator string' is not a recognized operator or type

我试过了:

我找到了可能的用户定义运算符列表,但找不到operator ""https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/ds533389(v%3dvs.100)

问题: 有人可以告诉我在 Visual Studio 2010 中是否可以使用 operator ""_exp"?或者也许还有其他方法可以实现这一点?

【问题讨论】:

  • 10.5 ** 2._exp C++ 中没有operator**
  • @GuillaumeRacicot - 但是您可以使用一元 operator * 编写一个类型,该类型返回实现二进制 * 的类型。
  • 如果您想要完全支持 C++11 功能,您需要更新您的 Visual Studio。
  • 我需要Exponent a = 123_exp;。你说的是同一个问题吗?
  • 它被称为“用户定义的文字”。供应商提供了相当完整的功能支持列表en.cppreference.com/w/cpp/compiler_support - IIUC VS12 也不支持它。

标签: c++ c++11 visual-studio-2010 visual-c++ operator-overloading


【解决方案1】:

Microsoft Visual Studio 10 不是 C++11 编译器。

他们的第一个完全支持 C++11 的编译器(包括您尝试使用的用户定义的文字)是 MSVC2017。

最后,请注意 10.5double不是 long double

【讨论】:

  • 其实说不是C++11编译器是不对的。这个例子不是我的,我只是测试了一下。你错过了第三句话的重点。不过还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多