【发布时间】:2020-06-22 12:42:23
【问题描述】:
我有一个变量,其地址作为第四个参数传递给setsocketopt。请注意,此参数被声明为常量指针 (const void *optval)。
在我提交的一个补丁中,我将该变量的声明更改为静态 constexpr。对此更改的一位审阅者有顾虑:他认为您是否总是可以使用 constexpr 的地址是有问题的。他建议我将其设为常量。在谷歌搜索后,我找不到太多关于 constexpr 变量的地址和对它的担忧。有人能解释一下关于 constexpr 变量地址的保证以及使用它的注意事项(如果有的话)吗?
如果有帮助,这里是代码(我添加了static constexpr,之前只是一个int):
static constexpr int ONE = 1;
setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, &ONE, sizeof(ONE));
谢谢!
【问题讨论】:
-
所有
constexpr所做的只是通知编译器它能够在编译时评估函数或变量的值。它不会改变ONE在这种情况下是指一个左值,您当然可以获取它的地址。换句话说,它不会改变变量的生命周期,如果这是您(或您的同事)所关心的。
标签: c++ c++11 pointers constexpr memory-address