我一直在用富有表现力的模板和绳索数据结构进行实验,试着看看可以实现什么样的收益.到目前为止它工作得非常好.但是,当尝试将多于5个参数连接在一起时,编译器无法正确优化并生成不必要的临时值.有人可以告诉我为什么会这样吗?是编译器限制还是我的优化选项需要调整?
我使用g ++ 4.4.1(mingw32)和以下选项:-O3 -Winline -Wextra -Wall -fno-exceptions -fno-rtti -fomit-frame-pointer -fexpensive-optimizations -fverbose-asm -S
代码如下,它只是一个实验,所以它并没有真正遵循任何标准:
#include <stdio.h>
template<typename Derived>
struct rope_base {
const Derived & ref() const;
};
struct string {
size_t m_length;
char * m_value;
template<typename Derived>
string(const rope_base<Derived> & rope);
~string();
const char * data() const;
size_t length() const;
char * write_to(char * dst) const;
};
struct static_string {
const char * m_value;
const size_t m_length;
static_string(const char * value);
size_t length() const;
char * write_to(char * dst) const; …Run Code Online (Sandbox Code Playgroud)