小编alb*_*ert的帖子

命名空间的使用、意外行为

test.cpp


enum {

  ERR_FILE_ACCESS       = 1,
  ERR_WHATEVER
};

enum ERR : unsigned int {

  ERR_FILE_ACCESS     = 5,
  ERR_FILE_FORMAT     = 6
};

int main(int, char**)
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,重新定义枚举器“ERR_FILE_ACCESS”会失败。但:

test2.cpp

enum {

  ERR_FILE_ACCESS       = 1,
  ERR_FILE_FORMAT,
  ERR_WHATEVER
};

namespace Internal {

  enum ERR : unsigned int {

    ERR_FILE_ACCESS     = 5,
    ERR_FILE_FORMAT     = 6
  };
}
using namespace Internal;

int main(int, char**)
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

确实编译成功。

我很惊讶/困惑,为什么命名空间 - after using namespace Internal;- 可以防止名称冲突?

c++

5
推荐指数
1
解决办法
106
查看次数

成员函数调用与构造函数的链接

class A {
  public:
    A(void) =default;

    A& foo(void)
    {
      return *this;
    }
};

int main(int, char**)
{
  A a =A{}.foo();
  A b{};
  A c{}.foo();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)
C:\temp\cpp>clang test.cpp
test.cpp:15:8: error: expected ';' at end of declaration
   15 |   A c{}.foo();
      |        ^
      |        ;
1 error generated.
Run Code Online (Sandbox Code Playgroud)

为什么编译器会抱怨A c{}.foo()

有没有办法避免分配?

我知道在 中A a =A{}.foo(),编译器会优化掉临时的,但可能A没有公共复制因子。

c++

0
推荐指数
1
解决办法
78
查看次数

标签 统计

c++ ×2