【问题标题】:In place initialization of PODPOD 就地初始化
【发布时间】:2013-03-21 14:00:10
【问题描述】:

我不认为“到位”是正确的术语,但我缺少一个更好的术语。

我有一个 POD,比如说:

struct My {
    int a;
};
//and suppose a operator<< to stream is also defined

我可以这样使用它:

My my = {3};
std::cout << my << std::endl;

我想知道我是否可以在下面做同样的事情,但不使用辅助函数:

template <typename ANY>
My helper(ANY value) {
    My r = {value};
    return r;
}
std::cout << helper(3) << std::endl;

我正在寻找与构造函数相同的东西,但由于我有一个 POD,我无法创建构造函数。

【问题讨论】:

  • 很遗憾你指定了c++03 - 你可以在c++11 中指定My{3}
  • @sftrabbit 太糟糕了,msvc 缺乏对 C++11 的良好支持。我讨厌使用 msvc。
  • 关于“就地初始化”,我认为你的意思是“aggregate initialization”。

标签: c++ c++03


【解决方案1】:

你可以这样做:

struct My {
    int a;
    int b;
    int c;
    float d;
};

void somefunc() {
   cout << (My){1, 2, 3, 4.5} << endl;
}

【讨论】:

  • 现在这是我以前从未见过的语法。我认为 C++11 之前的大括号初始化列表只能用于初始化程序。
  • g++ 4.7.2 抱怨启用了“-pedantic”标志的这种语法:“warning: ISO C++ forbids compound-literals [-pedantic]
猜你喜欢
  • 2017-07-07
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2015-03-22
相关资源
最近更新 更多