gpt4 book ai didi

c++ - 在编译时获取表达式的类型

转载 作者:行者123 更新时间:2023-12-01 15:05:05 24 4
gpt4 key购买 nike

在使用auto关键字进行编程时,有时会很容易知道编译器在编译时使用的类型。编译是否中止我需要知道类型的位置都没关系。简单的例子:

std::vector< int > s{1, 2, 3}; 

for (auto elem : s) {
elem = 5;
}

for (auto elem : s) {
std::cout << elem << std::endl;
}

将打印
1
2
3

因为elem是 int类型,而不是 int&类型。尝试编译代码并获取 elem的类型以尽早发现此类错误将是很好的。

最佳答案

经典方式是声明模板结构而无需定义:

template <typename> struct Debug;

然后使用它:
template struct Debug<std::string>;

要么
for (auto elem : s) {
Debug<decltype(elem)>{};

elem = 5;
}

消息错误看起来像
error: explicit instantiation of 'struct Debug<std::__cxx11::basic_string<char> >' before definition of template
template struct Debug<std::string>;
^~~~~~~~~~~~~~~~~~

error: invalid use of incomplete type 'struct Debug<int>'
Debug<decltype(e)>{};

Demo

顺便说一句,现在当鼠标悬停在 auto或变量上时,某些IDE会显示类型。

关于c++ - 在编译时获取表达式的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39634609/

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