- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 C++20 模式下使用 GCC10 尝试了以下第一个变体:
consteval std::experimental::source_location there()
{
return std::experimental::source_location::current(); // Line 3
}
void f(const std::experimental::source_location& a = there()) // Line 6
{
std::cout << a.line() << std::endl;
}
int main(int pArgc, char* pArgv[])
{
std::cout << there().line() << std::endl; // Line 13
f(); // Line 14
return 0;
}
我期望得到以下输出:
13
14
但是我得到了:
3
3
然后我尝试了以下第二种变体:
consteval std::experimental::source_location there(const std::experimental::source_location& a = std::experimental::source_location::current())
{
return a; // Line 3
}
void f(const std::experimental::source_location& a = there()) // Line 6
{
std::cout << a.line() << std::endl;
}
我期望得到以下输出:
13
14
但是我得到了:
13
6
为什么代码会这样?有没有办法在不使用预处理器宏的情况下使其按预期运行?
更新:使用“constexpr”或“inline”而不是“consteval”的第二个变体适用于最新的 GCC。所以剩下的问题是:为什么“consteval”也不起作用?有人告诉我这不是一个标准问题,而是一个实现主题,所以我将把这个问题重新标记为 GCC。
最佳答案
source_location::current()
总是 为您提供调用它的确切位置。观察到的行为正是它应该如何工作的。
默认函数参数在调用站点上进行评估。这就是为什么第二个示例中的第一次调用返回“13”的原因。这也是包装在函数调用中时应该如何使用 source_location
的唯一方式(否则没有多大意义)。
关于c++ - consteval 包装器与 source_location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62628942/
我正在研究捕获在基类上定义的每个方法,查找它在哪个文件中定义,然后基于此执行一些逻辑。 我目前有: # Defined in some file class Subclass ["/home
C++20 特性 std::source_location 用于捕获有关调用函数的上下文的信息。当我尝试将它与可变参数模板函数一起使用时,我遇到了一个问题:我看不到放置 source_location
我在 C++20 模式下使用 GCC10 尝试了以下第一个变体: consteval std::experimental::source_location there() { return st
考虑 following useless code : #include #include #include int main() { auto lines = std::views::io
考虑模板函数 g()和免费功能f() : #include #include auto g(auto...) { std::cout << std::source_location::curren
有一些预定义的预处理器宏(在 C 和 C++ 标准中指定),如 __line__和 __file__在预处理过程中分别由行号和文件名替换。在 C++20 中,一个新类 std::source_loca
std::experimental::source_location可能会在某个时候添加到 C++ 标准中。我想知道是否有可能将位置信息获取到编译时领域。本质上,我想要一个在从不同源位置调用时返回不同
库基础的 C++ 扩展,版本 2 ( N4564 ) 引入了 std::experimental::source_location 类型。 § 14.1.2 [reflection.src_loc.c
我正在按照 official documentation 上的说明进行操作 执行命令时: az acr build --registry --image webimage 我收到了 the foll
我想在 C++ 中创建一个简单的日志函数,它将代码位置添加到日志消息中。我想避免使用宏以及 __FILE__ 和 __LINE__ 的使用。 请注意,format 字符串始终是编译时字符串,我希望在编
可以在 gcc 中使用 __builtin_FILE()、__builtin_LINE()、等。Visual Studio 2017 中是否存在类似的内在函数?或者有什么方法可以在 Visual St
我是一名优秀的程序员,十分优秀!