如何解决C++ 为什么不能使用 constexpr 创建具有 const 引用成员变量的类?
在以下代码中,我尝试存储对另一个类的 const 引用:
struct A {
};
struct B {
constexpr B(A const & _a) : a(_a) {}
A const & a;
};
int main() {
constexpr A s1;
constexpr B s2{s1};
}
然而,编译器 (gcc 11.1) 抱怨:
cctest.cpp: In function ‘int main()’:
cctest.cpp:12:22: error: ‘B{s1}’ is not a constant expression
12 | constexpr B s2{s1};
|
而且我不明白为什么 s1
不被视为常量表达式。 s1
本身是代码中的 constexpr。我知道这可能与引用的生命周期有关,但我无法弄清楚逻辑。在这个例子的代码中,我不想存储 A 的副本,我真的只想要一个引用或(智能)指针。所以:
- 为什么
s1
不是常量表达式? - 处理此问题的最佳做法是什么?
非常感谢!
解决方法
Clang 12.0.0+ gives a descriptive note about the issue:
# Function to replace words in files names in a folder
import os
def main():
i = 0
# Ask user where the PDFs are
path = input('Folder path to PDFs: ')
# Sets the scripts working directory to the location of the PDFs
os.chdir(path)
filetype = input('entre file extention here: ')
rep = input('entre word to remove from file name: ')
for filename in os.listdir(path):
my_dest = filename.replace(rep,"") +"."+filetype
my_source = filename
my_dest = my_dest
# rename() function will
# rename all the files
os.rename(my_source,my_dest)
i += 1
# Driver Code
if __name__ == '__main__':
# Calling main() function
main()
因此您需要在此处添加一个 note: address of non-static constexpr variable 's1' may differ on each invocation of the enclosing function; add 'static' to give it a constant address
:
static
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。