Ale*_*exP 2 c++ g++ initializer-list visual-c++ c++20
我正在尝试在 main 中使用带有冒号的构造函数初始值设定项列表,但它无法在 Microsoft Visual Studio 2019 中编译(错误:标识符“名称”未定义且预期为 '}'),但它编译并打印输出在 Linux 中使用 g++(版本 10.2.0)没有任何问题。
我也尝试过不同版本的 MSVC,如 C++14、C++17,但没有结果。我知道 C++11 的所有可能的初始化,但我必须使用带有冒号 (:) 的那个。
有没有办法在 MSVC 中做到这一点?
提前致谢!
#include <string>
#include <iostream>
class Spell {
private:
std::string name;
std::string action;
public:
Spell(std::string name, std::string action) : name(name), action(action) {}
void print() {
std::cout << name;
}
};
int main() {
Spell* spell = new Spell{ name : "test", action : "lol" }; //HERE
spell->print();
}
Run Code Online (Sandbox Code Playgroud)
该语法是非标准的 GNU 扩展,因此任何版本的 Microsoft Visual C++ 都不支持(并且可能永远不会)支持。
指定初始化器在 C++20 中被标准化,但语法不同,它们仅可用于聚合初始化。等效的标准指定初始值设定项语法是Spell{.name = "test", .action = "lol"}. 但是,这在这种情况下也不起作用,因为Spell它不是聚合,因为它具有私有数据成员和用户定义的构造函数。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |