 <p>You haven't said what you want to achieve. I assume that you need that each of your instances react on a specific way, depending on a certain class variable.</p> <p>However, if you don't need a per-instance behaviour, then you can use static variables. The following works:</p> <pre><code>#include &lt;iostream&gt; using namespace std; struct test { static string t1; void say(const string &amp;val=t1){ cout &lt;&lt; val &lt;&lt; "!" &lt;&lt; endl; } }; string test::t1; int main() { cout &lt;&lt; "Hello World" &lt;&lt; endl; test::t1 = string("asd"); test a; a.say(); a.say("bla"); test::t1 = string("blahblah"); a.say(); return 0; } </code></pre> <p>... which means that all the objects of the class <code>test</code> will use the static string <code>t1</code> as their default value.</p> <p>You can "hack" a little bit, and use this as an ugly sentinel:</p> <pre><code> void say(const string &amp;val=t1){ if (&amp;val == &amp;t1) { // They are using the default value, so act as you want } else { // they are providing a value } } </code></pre>