gpt4 book ai didi

c++ - 统一初始化int* : how can it be forced?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:05 32 4
gpt4 key购买 nike

以下代码无法使用 clang++ 3.8.0g++ 6.3.0 进行编译(编译器标志为 -std=c++11 -Wall -Wextra -Werror -pedantic-errors):

int main()
{
int* a = int*{}; // doesn't compile
// ^^^^ can't be parsed as a type
(void)a;

using PInt = int*;

PInt b = PInt{}; // compiles successfully
// ^^^^ is parsed as a type
(void)b;
}

这是一种强制编译器以正确方式解释 int*{} 的方法吗(typedefing of int*是其中一种方式)?

最佳答案

您有几个选择。

您已经发现的一个是类型别名:

using PInt = int*;
PInt a = PInt{};

另一个是避免完全无意义的复制初始化:

int* a{};
PInt a{};

最好的办法是停止在这种愚蠢的差事上浪费时间,并以清晰的方式初始化您的指针:

int* a = nullptr;

当然,如果您的问题真的是关于创建用于表达式的临时对象,而不是完整的声明(不清楚),那么这对您没有帮助;但是你有一个简单的 C 风格 (int*)nullptr 可以玩。

不过,简短的回答是,您不能“强制”编译器忽略 C++ 的语法,而是使用其他语法。

关于c++ - 统一初始化int* : how can it be forced?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415533/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com