C++ 使用const char*(nullptr)进行编译时检查

C++ 使用const char*(nullptr)进行编译时检查,c++,compile-time,nullptr,C++,Compile Time,Nullptr,我有一个模板类,它将字符串文本作为参数。代码运行良好-但我有一个问题,是否可以使用编译时检查跳过if(S)或else块体的生成?(类似于“如果存在”或“如果、特征等”)。我知道我可以有一个专门的a来定义一个不同的print()函数,但我也想知道是否有其他(更简单的)方法来实现这一点。谢谢 template<char const* S = nullptr> class A { public: void print() { if (S)

我有一个模板类,它将字符串文本作为参数。代码运行良好-但我有一个问题,是否可以使用编译时检查跳过
if(S)
else
块体的生成?(类似于“如果存在”或“如果、特征等”)。我知道我可以有一个专门的
a
来定义一个不同的
print()
函数,但我也想知道是否有其他(更简单的)方法来实现这一点。谢谢

template<char const* S = nullptr>
class A
{
public:
    void print()
    {
        if (S)
            cout << S << endl;
        else
            cout << "nullptr" << endl;
    }
};
模板
甲级
{
公众:
作废打印()
{
若有(S)

cout在您的情况下,您不能将S的默认值设置为“nullptr”或任何其他常量字符串吗?当然,当您实际上不需要S为NULL时,这会起作用,但它会跳过if检查。

添加一个函数

constexpr const char* getStr(){
   return S? S : "null";
}
然后就变成,

void print(){
   std::cout << getStr() << std::endl;
}
void print(){

std::cout-Yay。最简单的方法是启用编译器优化。回答得好,谢谢:)我不能完全控制编译器选项。事实上,我们的编译器甚至拒绝上面的代码(
if(nullptr)
),因为“条件表达式是常量”@userXXX实际上你使用哪种编译器?我使用VC++-但在我们的代码服务器上运行的编译器是我无法控制的。(我应该选择一个用户名。)确实):我理解。我不擅长C++,而且我也不知道这是否应该编译,但是这是一个有趣的问题。谢谢-打印/cOutt只是为了演示,实际代码更复杂,如果添加其他函数,则仍然会产生相同的<代码>。如果…..…/COD>代码块。是的,S的默认值是null pTR。我不确定我在听你的,你能再详细一点吗?